您的位置:首页 > 其它

STL学习笔记10— —容器的选用

2017-07-17 14:59 204 查看
默认情况下,选用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

 ArrayVectorDequeListForward List关联容器无序容器
出现TR1C++98C++98C++98C++11C++98TR1
内部结构Static arrayDynamic arrayArray of arraysDoubly linked listSingly linked listBinary treeHash table
元素类型ValueValueValueValueValueSet:value

Map:key/value
Set:value

Map:key/value
重复可元素只有multiset、multimap只有multiset、multimap
迭代器类型随机存取随机存取随机存取双向前向双向前向
扩大/收缩从不一端两端随意随意随意随意
随机存取大部分
查询很慢很慢很快
插入/删除迭代器失效-重分配总是从不从不从不重新生产哈希表
插入/删除指针和引用失效-重分配总是从不从不从不从不
允许设置内存----
删除元素会释放内存-只能使用shrink_to_fit()有时总是总是总是有时
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: