C++容器:array,vector和list

本文转载自简书,仅供个人收藏,原文链接在此
这三个是C++中比较常用的顺序容器,如何选择这三个是一个值得探讨的问题。

三种容器各自的特点:

  • 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函数了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值