STL(十五)---容器的选用

容器的选用

默认情况下,选用vector,内部数据结构最简单,允许随机存取。

如果经常要在序列头部和尾部插入和删除元素,应该使用deque。如果希望元素被删除时,容器能自动缩减内存,那么也要选deque。此外,由于vector通常采用一个内存块存放元素,而deque采用多个内存块,后者可包含更多元素。

如果需要经常在容器中段执行元素的插入、删除或移动,可考虑list。list提供特殊成员函数,可在常数时间将元素从A容器转移到B容器。但由于list不支持随机存取,如果只知道list的头部却要访问中段元素,性能较低。

和所有“以节点为基础”的容器相似,只要元素还是容器的一部分,list就不会令指向那些元素的迭代器失效。vector则不然,一旦超过容量,它所有的迭代器、指针和引用都会失效;执行插入和删除时,也会令部分失效。对于deque,当它大小改变时,所有都会失效

如果你要的容器需要“每次操作失败便无效用”,应该选list,或是关联容器。

如果经常需要根据某个准则来查询元素,应当使用“以该排序准则对元素进行排序”的set或multiset。

处理键值对,使用unordered_map或unordered_multimap;如果对元素的顺序有要求就使用map或multimap

如果需要使用关联数组,选用unordered_map;如果对元素的顺序有要求就使用map

如果需要使用字典,选用unordered_multimap;如果对元素的顺序有要求就使用multimap

Array Vector Deque List Forward List 关联容器 无序容器
出现 TR1 C++98 C++98 C++98 C++11 C++98 TR1
内部结构 Static array Dynamic array Array of arrays Doubly linked list Singly linked list Binary tree Hash table
元素类型 Value Value Value Value Value Set:value Map:key/value Set:value Map:key/value
重复可元素 只有multiset、multimap 只有multiset、multimap
迭代器类型 随机存取 随机存取 随机存取 双向 前向 双向 前向
扩大/收缩 从不 一端 两端 随意 随意 随意 随意
随机存取 大部分
查询 很慢 很慢 很快
插入/删除迭代器失效 - 重分配 总是 从不 从不 从不 重新生产哈希表
插入/删除指针和引用失效 - 重分配 总是 从不 从不 从不 从不
允许设置内存 - - - - -
删除元素会释放内存 - 只能使用shrink_to_fit() 有时 总是 总是 总是 有时

你可能感兴趣的:(C++之STL总结)