c++ 中 vector、list 、set 、map等相关容器的区别

1. vector
vector 封装了数组 ,是有序的。在内存中是一块连续的内存空间进行存储。但是不支持用户指定空间大小。系统首先分配一个非常大的内存空间进行预备存储,当超过此分配的空间时在进行整体重新分配一块内存空间存储。这就让人感觉可以不指定vector即一个连续内存大小的感觉。通常默认非配的控件能够完成大部分存储的。
优点:
1. 随机访问元素快,支持[]下标与at()访问。
2. 节省空间
缺点:
1. 在头部插入、删除特别慢;在尾部插入、删除比较快;在内部插入、删除比较慢。
2. 当动态添加的数据超过默认分配的大小时,要进行整体的重新分配拷贝与释放。
3. 存储空间有限,必须是连续的空间
2. list
list 封装了链表,是有序的。 不过在内存中不是连续的内存存储,不支持[]。每一个结点都包括一个信息块、一个前驱指针、一个后驱指针。可以不分配必须的内存大小就可以方便的进行添加和删除。
优点:
1. 不使用连续的内存进行存储,存储空间无限(只要内存够)。
2. 在内部插入、删除很快(不需要进行内存拷贝或者移动,只需要进行指针的更改)
缺点:
1. 随机查找太慢
2. 相比vector 占用内存比较大
3. set、map
set 、map 属于标准关联容器,使用了非常高效的平衡检索二叉树:红黑树。 他们的插入、删除效率比其他序列容器高,因为不需要做内存拷贝或者移动,而是直接指向结点指针。内存中存储不连续。包含的key值不能包含相同的;占用空间比较大;
区别:
1. set 只有一个key值,map是一个键值对key+value
2. 效率都很高
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值