[C++]STL库list和vector的简单介绍

list和vector

1.list 的介绍
(1)list是序列容器,允许在任何位置进行O(1)时间的插入和删除操作
(2)list 容器使用双链表实现
(3)与其他基本标准序列容器(array、vector 和 deque)相比,list 通常在容器内的任何位置插入、提取和移动元素
(4)list的主要缺点是不能通过位置直接访问元素,必须从已知位置(如开始或结束)迭代到该位置
(5)list 要使用一些额外的内存空间(next,prev)来保持与每个元素相关联(前后序的线性)的链接信息,从而导致存储小元素类型(如 char,short,int 等)的列表的存储密度低。
2.vector 的介绍:
(1)vector 是表示可以改变大小的数组序列容器。
(2)vector 与数组一样,元素使用连续的存储空间,可以使用偏移量来访问存储空间中的元素。
(3)vector 与数组不同的是,vector 的大小可以动态变化,容器会自动扩容存储空间。
(4)vector 使用一个动态分配的连续存储空间来存储元素。在插入新元素时存储空间可能需要重新分配,以便增大大小,这意味着分配一个新存储空间要将所有元素移动到其中。
(5)vector 容器可以分配一些额外的存储空间以适应可能的增长,因此容器的实际容量可能大于严格需要的存储容量(即容器的大小)。
(6)vector 与 array 相比,向量消耗更多的内存,以换取管理存储和以高效方式动态增长的能力。
(7)与其他动态序列容器(deques、list 和 forward_list)相比,vector可以非常高效地访问其元素(就像数组一样),并相对高效地从其末尾添加或删除元素。对于在结尾以外的位置插入或删除元素的操作,其性能较差。
3.list和vector的区别
(1)vector底层实现是数组,而list是双向链表;vector申请空间时是一块连续的空间,所以不易造成内存碎片,内存利用率高,而list的结点都是不连续的,容易造成内存碎片,空间利用率低
(2)vector是顺序内存,支持随机存取,而list不行
(3)插入和删除时,vector如果空间不够,需要申请空间,并且对之前的数据进行拷贝,而且vector在中间插入或删除时,会导致内存拷贝;list可以在任何位置进行插入和删除
(4)vector 一次性分配好内存,不够时才进行 2 倍扩容(或 1.5 倍);list 每次插入新节点都会进行内存申请
(5)vector 随机访问性能好,插入删除性能差;list 随机访问性能差,插入删除性能好
(6)vector插入和删除都会导致迭代器失效;list插入时不会导致迭代器失效,删除时会导致当前迭代器失效,不影响其他迭代器
4.应用场景
1.如果需要高效的随机存取,而不在乎插入和删除的效率(很少使用插入和删除操作)。选vector。
2. 如果需要大量的插入和删除的操作,随机存取很少使用。选用 list。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Serendipity---小ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值