如何选择STL容器

C++标准程序库提供了各种各具特性的不同容器

如何选择最佳的容器类别?如果需要处理的元素很少。可以忽略时间复杂度,因为线性算法对元素的处理是比较快。此时“线性复杂度搭配快速的元素处理”要比“对数复杂度搭配较慢的元素处理”来的划算。

  • 缺省情况下使用vector。vector的累不结构最简单,且支持随机存取,所以数据的存取十分方便灵活,数据的处理也够快。

  • 如果经常在序列的头部和尾部安插和溢出元素,应该采取deque。如果希望元素被移除是,可以自动缩内存,也应该使用deque。此外,由于vector使用一个区块来存放元素,而deque使用多个区块,所以deque能存放更多的元素。

  • 如果需要经常在序列的中部执行的元素的安插,移除和移动,可以考虑使用list,list提供特殊的成员函数,可以在常数时间内将元素有A移到B容器,但是list不支持随机存取,如果只知道list的头部,访问中部会中部元素,性能会大打折扣。
    和所有的以节点为基础的容器相似,只要元素还是容器的一部分,list的指向那些元素的迭代器就不会失效。vector则不然,一旦超过其容量,所有的迭代器,指针,引用都会失效,执行安插或移除操作时,也会有一部分的失效。对于deque,当它的大小改变时,也会失效。

  • 若需要每次操作不成功,就不会有任何的作用,此时,也应该选择list。

  • 如果需要使用某一个准则来搜寻元素,则应该使用set,和map。set的key值和value一样,但是map使用pair<key,value>,可以使用key值来搜寻value的值 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值