STL不同容器的优缺点

本文详细介绍了STL中的序列容器如vector、deque和list,以及关联容器set、multiset、map和multimap的特性。针对不同场景,讨论了容器的选择策略,包括元素插入、查找速度、内存连续性和排序需求等因素。建议根据具体需求,如高效随机存取、频繁插入删除、按键值查找等,来选择合适的容器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、容器的分类
1、序列容器
(1)vector
典型的序列容器,任意元素的读取、修改具有O(1),在序列尾部进行插入、删除是O(1),但在序列的头部插入、删除的时间复杂度是O(n),可以在任何位置插入新元素,有随机访问功能,插入删除操作需要考虑。

(2)deque
序列容器,内存也是连续的,和vector相似,区别在于在序列的头部插入和删除操作也是O(1), 可以 在任何位置插入新元素,有随机访问功能。

(3)list
序列容器,内存是不连续的,任意元素的访问、修改时间复杂度是O(n),插入、删除操作是O(1), 可以在任何位置插入新元素。

2、关联容器
(1)set
关联容器,元素不允许有重复,数据被组织成一棵红黑树,查找的速度非常快,时间复杂度是O(logN)

(2)multiset
关联容器,和set一样,是允许有重复的元素,具备时间复杂度O(logN)查找功能。

(3)map
关联容器,按照{键,值}方式组成集合,按照键组织成一棵红黑树,查找的时间复杂度O(logN),其中键不允许重复。

(4)multimap
和map一样,区别是键可以重复

3、容器适配器

二、使用中需要考虑的一些因素
1、需要添加大量元素
不适合用vector,因为vector底层是数组,当前容量不足时就要扩容,将所有旧元素全部拷贝到新内存中,开销太大

适合用list
deque是vector和list的折中,内存不够时需要申请新内存但不用拷贝旧数据

2、查找速度
 对于序列容器需要分两种情况,区分依据是元素是否排序
 1)对于已经排序的序列容器,使用binary_search可以获得对数时间复杂度的查找速度(O(logN));
 2)而未排序的序列容器二分查找肯定是用不了,能达到的最好的时间复杂度是线性的(O(n))。

对于关联容器,存储的时候存储的是一棵红黑树,总是能达到对数时间复杂度(O(logN))的效率,因为关联容器是按照键值排好序的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值