C++优化:array, vector, 和 list,选择正确的顺序容器

这三个是C++中比较常用的顺序容器,如何选择这三个是一个值得探讨的问题。
关于std::array的介绍,请花两分钟看一下我的另一篇文章C++11:array。

三种容器各自的特点:

  • std::array:元素占用的空间是在栈上分配的,大小固定不变,,内存连续,可随机存取。是对静态数组的封装。封装后占用的内存与封装前是一样的。
  • std::vector:元素占用的空间是在堆上分配的,大小是可以改变的,每当容器需要扩大时,都会按照相同的系数进行扩大,内存连续,可随机存取。是对动态数组的封装。封装后占用的内存比封装前要大,一般是多两个指针的大小。
  • std::list:元素占用的空间是在堆上分配的,空间是按需分配的,用到一个元素的空间,就分配一个元素的空间。不能随机存取,可双向存取。list的每个元素中都要包含一个指向下个元素的指针。

选择:
(1)如果你的元素个数确定且数量不是很大,应使用std::array,在存取速度和内存占用上,相对静态数组是没有消耗的,且类型安全。
(2)如果你的元素个数不确定,但是元素个数的变化频率比较低,这时候应选择使用std::vector。存取速度上相对与动态数组是没有消耗的。但是(1)一般默认会多两个指针的内存大小,原因是记录当前std::vector的大小之类的状态(2)当元素个数达到std::vector的最大容量时,std::vector会重新分配新的足够的空间来储存数据,并将旧的数据拷贝到新分配的空间中,这两点会带来一定的消耗。
(3)如果你的元素个数不确定,并且元素的个数变化的频率比较高,这时候选择使用std::list。
(4)由于std::list不是随机存取的,所以不能使用stl中的std::sort函数。这时候要考虑另外两种容器或者自己写sort函数了。

最后给大家看一下,构造含有两个元素的三种容器的汇编代码:


image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • STL部分 1.STL为什么广泛被使用 C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vec...
    杰伦哎呦哎呦阅读 4,490评论 0赞 9
  • 容器的概念所谓STL容器,即是将最常运用的一些数据结构(data structures)实现出来。容器是指容纳特定...
    饭饭H阅读 469评论 0赞 0
  • Vector 就像是 C++ STL 容器的瑞士军刀。Bjarne Stoutsoup 有一句话 : "一般情况下...
    10d3642f94b1阅读 8,690评论 0赞 3
  • 容器 在实际的开发过程中, 数据结构本身的重要性不会逊于操作于数据结构的算法的重要性, 当程序中存在着对时间要求很...
    编程小兔崽阅读 1,214评论 0赞 1
  • 现在的生活压力着,快乐着。安奈跟我都无法胜任带孩子的重任,所以由父母主导带孩子是必然的。父母每天带孩子非常累,很难...
    安奈小窝阅读 821评论 0赞 0

友情链接更多精彩内容