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

ArrayVectorDequeListForward List关联容器无序容器
出现TR1C++98C++98C++98C++11C++98TR1
内部结构Static arrayDynamic arrayArray of arraysDoubly linked listSingly linked listBinary treeHash table
元素类型ValueValueValueValueValueSet:value Map:key/valueSet:value Map:key/value
重复可元素只有multiset、multimap只有multiset、multimap
迭代器类型随机存取随机存取随机存取双向前向双向前向
扩大/收缩从不一端两端随意随意随意随意
随机存取大部分
查询很慢很慢很快
插入/删除迭代器失效-重分配总是从不从不从不重新生产哈希表
插入/删除指针和引用失效-重分配总是从不从不从不从不
允许设置内存-----
删除元素会释放内存-只能使用shrink_to_fit()有时总是总是总是有时
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值