effective STL 笔记

STL这块一直没有好好总结,开发业务时有时比较急其实有时也没用好STL的感觉,感觉代码看起来好丑= = 、决定重新再翻一次这本书总结一下,想到什么就派生一下,不一定都是书上的内容 (有空就上来更新)
第1条:慎重选择容器类型
(1)容器的分类
标准STL序列容器:vector,string,deque,list
标准STL关联容器:set,multiset,map,multimap
非标准序列容器:slist,rope
非标准关联容器:hash_set,hash_multiset,hash_map,hash_multimap
标准非STL容器:数组,bitset,valarray,stack,queue和priority_queue
(2)序列容器的选择
vector是默认的序列类型(随机访问频繁),频繁地在序列中间插入删除用list,经常在头部和尾部操作用deque(deque可通过计算数据下标所在位置实现随机访问)
(3)选择
随机访问迭代器的容器只有:vector、deque、string
事务语义:只有List实现了,性能有代价
迭代器失效:基于节点的容器插入删除不会使迭代器指针和引用变无效(除非是正在删除的元素),而连续型内存容器的插入和删除一般会失效
string是STL中在swap过程中会导致迭代器、指针和引用变为无效的唯一容器
deque没有删除操作且插入操作只发生在容器末尾,指针和引用不会变为无效(唯一容器)

第二条:不要试图编写独立于容器类型的代码
每一种容器都不一样,提供的接口形式不一样,没有通用的适应所有容器的代码
e.g.
1、序列容器支持push_front和push_back,关联容器则不能
2、关联容器提供对数时间的lower_bound,upper_bound和equal_range的成员函数(序列容器只能使用algorithm里面单独提供的,切需要排序好),也只有关联容器提供count函数
3、关联容器和序列容器erase接口不一样,且序列容器需要处理迭代器失效的问题,遍历删除需要注意!!!!
4、序列容器中,list和deque没有reserve和capacity的操作,sort,stable_sort,partial_sort和nth_element要求必须随机访问迭代器,所以list不适用,list本身提供了sort成员函数(稳定排序)
5、vector没有find,string find系列函数find(),rfind(),find_first_of(),find_last_of(),find_first_not_of(),find_last_not_of()

你可能感兴趣的:(linux,c++)