随笔分类 - C/C++
摘要:Effective STL 43: Prefer algorithm calls to hand-written loops Suppose you have a Widget class that supports redrawing: class Widget
{
public: Widget(); virtual ~Widget()...
阅读全文
摘要:Effective STL 学习笔记 39 ~ 41 Table of Contents Make Predicate pure Function
Make Functor classes adaptable
ptr_fun, mem_fun and mem_fun_ref 1 Make Predicate pure Function 纯函数...
阅读全文
摘要:Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value 严格来讲, C 和 C++ 都不支持将函数作为参数,真正作为参数的,实际上是
pass-by-value 的函数指针, 作为函数指针的模拟, Functor 作为参数时候也是按值传递的,有些 STL 的实现中,将 Funct...
阅读全文
摘要:Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 有些个算法对有序的和无序的数据都能应用,但多数情况下,他们在输入数据有序时才最有用。 下列算法要求输入数据必须有序: binary_search, upper_bound, lower_bound, equal_range 这些算法均使用了二分查找 (binar...
阅读全文
摘要:Effective STL 学习笔记 32 ~ 33 Table of Contents 记得 Remove 后要 Erase
remove, container, pointer 1 记得 Remove 后要 Erase Item 9 中已经提到过,如果真的想要用 remove 从容器中删除元素,必须要在 remove 之后使用 erase...
阅读全文
摘要:Effective STL 学习笔记 31:排序算法 Table of Contents partial_sort
nth_element
stability
partition
总结 1 partial_sort partial sort 可以进行部分排序,例如,仅 按顺序排出 某个容器中的前 20 名: bool quality...
阅读全文
摘要:Effective STL 学习笔记 Item 30: 保证目标区间足够大 Table of Contents 1. 容器区间与算法
2. back_inserter
3. front_inserter
4. inserter
5. inserter & reserve 1 容器区间与算法 STL 容器吸引人的地方之一在于它能够自动管理内存,...
阅读全文
摘要:Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor Table of Contents 1. Iterator 的类型
2. 迭代器之间的转换
3. Iterator is Special
4. 总结: 1 Iterator...
阅读全文
摘要:Effective STL 学习笔记: Item 22 ~ 24 Table of Contents 1. 避免 \(set \& multiset\) 在原位改变 Key
2. Consider replacing associative containers with sorted vectors
3. Choose carefully betwe...
阅读全文
摘要:Effective STL 学习笔记 Item 21:Comparison Function 相关 Table of Contents 1. Always have comparison functions return false for equal values
2. Strict Weak Ordering 1 Always have c...
阅读全文
摘要:Effective STL 学习笔记:19 ~ 20 Table of Contents 1. Item 19: 相等 (Equality) 与等价 (Equivalence)
2. Item 20: Specify Comparison Type for Associative containers of pointers 1 Item 19...
阅读全文
摘要:vector 看起来像是一个存放布尔变量的容器,但是其实本身其实并不是一个容器,它里面存放的对象也不是布尔变量,这一点在 GCC 源码中 vector 的注释中写的很清楚:/** * @brief A specialization of vector for booleans which offers fixed time * access to individual elements in any order. * * Note that vector does not actually meet the requirements for being * a container. ...
阅读全文
摘要:假设有若干对象存于一个 vector 中:class Widget;vector vw;后来由于某些原因,从该容器中删除了若干对象(参考erase-remove idiom )。对于 vector 和 string 来讲, erase() 和 clear() 并不会改变容器的capacity,也就不会改变他们的内存占用。swap() 本意是用来交换两个容器的内容( Iterators, pointers, and references),但我们可以用他来快速将容器的 capacity 调整为 合适 的大小:vector(vw).swap(vw);巧妙之处在于, vector 的拷贝构造函数仅仅
阅读全文
摘要:有时需要支持 C 的接口,但这并不复杂。对于 vector 来讲, \(v[0]\) 的地址 \(\&v[0]\) 即可作为数组指针传递给 C API: 1: // Legacy C API. 2: extern void doSomething(const int* pInts, size_t numInts); 3: 4: vector v; 5: // ... 6: // Operations on v. 7: // ... 8: 9: if (!v.empty())10: {11: doSomething(&v[0], v.size());12: }也许有人会说:可以用
阅读全文
摘要:vector 和 string 容器在动态插入一个新的对象时,如果容器内空间不够,该容器会:重新分配空间 通常的做法是分配当前 Capacity 大小两倍的空间。将旧空间中的所有元素拷贝进新的空间中。销毁原有空间中存储的对象。销毁原有的空间。可见一个简单的操作背后实际可能会有许多动作。例如如果想创建一个容器让其存放 1 ~ 1000 这 1000 个 int 值,如果用下面的方法:vector v;for (int i = 1; i v;v.reserve(1000);for (int i = 1; i 当前 capacity: 重新分配空间,改变 Capacity,但不影响 siz...
阅读全文
摘要:Effective STL 学习笔记: 多用 vector & string如果可能的话, 尽量避免自己去写动态分配的数组,转而使用 vector 和 string 。原书作者唯一想到的一个不用 string 的可能的理由,就是 string 所使用的引用计数 (reference counting) 在多线程下可能会因为并发控制反而导致性能下降。我们可以通过查看文档或者 STL 源面的方法来看 String 是否引入了引用计数,如果 string 在多线程下真的因为引用计数而导致了性能下降,我们可以通过下面的方法来避免:看是否可以通过某些方法来禁用引用计数,例如条件编译 该方法可移植
阅读全文
摘要:Table of Contents1. STL, Thread and SGI2. STL and Lock2.1. RAII2.2. Use Lock in STL1 STL, Thread and SGIC++98 以及之前的 C++ 标准中,并未对线程做出过规定,但对于 STL 来讲,SGI 做出了自己的规定,很多其他的 STL 实现也遵循这些规定:The SGI implementation of STL is thread-safe only in the sense that simultaneous accesses to distinct containers are safe
阅读全文
摘要:Effective STL 笔记 – Item 6 ~ 7: Container and Object Pointer中间两次笔记被删掉了,简单补一下:Item 3 中提到如果将对象直接放入容器中,可能会引发问题:大量的拷贝行为要求对象的拷贝构造代价要小试图将派生类放入存放基类的容器中会引发 Slicing 问题。对此的简单方法就是在容器中保存对象 指针 ,但如果直接保存指针的话,我们需要自己维护和管理内存,容易混乱。最好的方法是保存 智能指针(smart pointer shared_ptr)) 。需要注意的是,这里提倡的是 shared_ptr,不是 autoptr,C++ 标准要求不能声
阅读全文
摘要:1 Overview
1.1 Initial Processing
1.1.1 End Of Line (EOL)
1.1.2 Continued lines
1.1.3 Comments
阅读全文

浙公网安备 33010602011771号