/** ** project name: for-effective-stl ** date: 2009-10-20 ** author: junkun huang ** e-mail: huangjunkun@gmail.com ** declare: 该工程存放内容说明,在学习《Effective STL》过程中,编写的测试性和研究性的代码。欢迎交流,谢谢! 实验环境说明: Windows + CodeBlocks + MinGW btw. 遗失了其中一部分测试性代码啊,纯属学习型的>_< ... **/ 《Effective STL》点滴 //---条款1:慎重选择容器类型 ---------------- //---条款2:不要试图编写独立于容器类型的代码 -------------- //---条款3:确保容器中的对象拷贝正确而高效 ------------ //---条款4:调用empty() 而不是检查size()是否为 0 -------- //---条款5:区间成员函数优先于与之对于的单元素成员函数 ---- //---条款6:当心 C++ 编译器最烦人的分析机制 ------------ //---条款7:如果容器包含了通过new 操作创建指针,切记在容器对象析构前将指针delete掉 ----- //---条款8:切勿创建包含auto_ptr的容器对象 -------------- //---条款9:慎重选择删除元素的方法 ----------------------- //---条款10:了解分配子(allocator)的约定和限制 --------- //---条款11:理解自定义分配子的合理用法 ---------------- //---条款12:切勿对 STL 容器的线程安全性有不且实际的依赖 ------------------- //---条款13:vector 和 string 优先于动态分配数组 ------- //---条款14:使用reserve 来避免不必要的重新分配 -------- //---条款15:注意string 的多样性()实现多样性 ----------- 包含: // 1 .大小---size ,2 .容量---capacity ,3 .分配子---alloctor ,4 .引用计数 ---- //---条款16:了解如何把 vector 和 string 数据传给 就的API ----- //---条款17:使用 “swap技巧”除去多余的容量 vector ,string -------------- //---条款18:避免使用 vector<bool> ,使用 deque<bool> ,bitset 替代 ----- //---条款19:理解相等(equality)和等价(equivalence)的区别 ------ //---条款20:为包含指针的关联容器(亦其他容器)指定比较类型 !----- //---条款21:总是让比较函数在等值情况下返回false ------------ //---比较函数的返回值表明的是按照改函数定义的排列顺序,一个值是否在另一个之前 ---- //---条款22:直接切勿修改set或是 multiset 中的键值 ----- //---条款23:考虑用排序的vector替代关联容器 -------- //---条款24:当效率至关重要时,请在map::operator[] 和 map::insert 之间谨慎做出选择------- //---条款25:熟悉非标准的哈希容器--hash_container ------------------ //---条款26:iterator 优先于const_iterator、reverse_iterator、以及const_reverse_iterator // --- iterator -> (隐式转换)const_iterator //---条款27:使用 distence 和 advance 将容器的const_iterator转换 iterator //---条款28 :正确理解有 reverse_iterator 的 base()成员函数所产生的iterator的用法 //---条款29 :对于逐个字符的输入请考虑使用 istreambuf_iterator ,对于逐个字符的输出请考虑使用 osstreambuf_iterator //---条款30:确保目标区间足够大 ---------------------- //---条款31:了解各种与排序有关的选择 ---------------- //---条款32:如果确实需要删除元素 ,则需要在remove这类算法之后调用 erase----- //---条款33:对于包含指针的容器使用remove这类算法时要特别小心! ----------- //---条款34:了解哪些STL算法要求使用排序区间作为参数 ---- //---条款35:通过 mismatch 或 lexicographical_compare 实现简单的忽略大小写 //---条款36:理解copy_if 算法的正确实现 ,STL没有包含copy_if的实现-------------- //---条款37:使用accumulate 或是 for_each 进行区间统计 --- //---条款38:遵循按值传递的原则设计函数子类 ---- //---条款39:确保判别式是“纯函数” --- //---条款40:若一个类是函数子,则应使它可配接 ---- //---条款41:理解ptr_fun ,mem_fun ,和mem_fun_ref的由来 --- //---条款42:确保less<T> 与operator< 具有相同的语义 --- //---条款48:总是包含(#include)正确的头文件 ---- //---条款49:学会分析与STL相关的编译器诊断信息 ---- //---条款50:熟悉与STL 相关的Web站点 ----