1.标准STL序列容器:vector,string,deque,list;
2.标准STL关联容器:set,multiset,map,multimap;
3.非标准序列容器:slist,rope;slist是一个单向链表,rope本质上是一个“重型”string
4.非标准的关联容器:hash_set,hash_multist,hash_map,hash_multimap;
5.vector < c h a r> 作为string的替代;
6.vector作为标准关联容器的替代
7.如何在vector,list,deque中做出选择这里
8.标准的连续内存容器有:vector,string,deque;非标准的rope也是连续内存的容器;
9.基于节点的容器在每一个内存中只存放一个元素;如list,slist都是基于节点实现的,所有标准的关联容器也是如此,(通常的实现方式是平衡树)。非标准的哈希容器使用不同的基于节点的实现。
10.在容器的任意位置插入元素,选择序列容器,关联容器不行。
11.如果不关心容器中的元素是排序的,哈希容器是一个可行的方案,否则,避免使用哈希容器
12.如果选择的容器必须是标准c++的一部分,就排除哈希容器,slist,rope
13.如果迭代器必须是随机访问迭代器,则对容器的选择就被限定为vector,deque,string;或许你也可以考虑rope,如果使用双向迭代器,那你必须避免slist及哈希容器的一个常见实现。
见第五十条和第二十五条
14.容器中数据的布局是否与C兼容,如果是的话,选择vector
15.元素的查找速度如果是关键因素,考虑哈希容器(25条),排序的vector(23条),标准关联容器———也许这就是优先顺序。
16.如果容器内部使用了引用计数技术,就要避免使用string,因为许多string的实现都是用引用计数,rope也要避免,因为权威的rope是基于引用计数的,
当然,你可以考虑.vector < c h a r>
17.在标准容器中,只有list对多个元素的插入操作提供了事务语义
所谓事务语义就是在插入和删除操作失败后,需要回滚的能力。
18.基于节点的容器不会是迭代器,指针和引用变为无效,而对连续内存容器相反
19.string在STL中swap过程会导致迭代器,指针,引用,变为无效的唯一容器,
20.deque是唯一的,迭代器可能变成无效而指针和引用不会变成无效的STL标准容器
第一条:慎重选择容器类型
最新推荐文章于 2021-11-15 16:33:00 发布