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的值 。