C++ STL中各容器内存、优劣的分析

本文分析了C++ STL中的四种主要容器——vector、deque、list和关联容器(set, map等)的内存存储方式及优缺点。vector作为动态数组,适用于高效随机访问,但插入删除操作效率低;list以链表形式存储,插入删除操作高效但访问慢;deque结合了随机访问和两端操作的优点,插入删除效率不如list。关联容器如set、map基于红黑树,插入删除速度快于vector,慢于list,检索速度优于list。" 79587931,7512302,Q-Walking E&S购物列表页面开发实战,"['前端开发', 'HTML', 'CSS', 'JavaScript', '前端框架']

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

STL有三大核心部分:容器(Container)、算法(Algorithms)、迭代器(Iterator)。以下介绍容器相关内容:

各种容器的元素在内存中的储存方式

1、vector(向量):相当于数组,但其大小可以不预先指定,并且自动扩展。它可以像数组一样被操作,

由于它的特性我们完全可以将vector 看作动态数组。在创建一个vector 后,它会自动在内存中分配一块连续的

内存空间进行数据存储,初始的空间大小可以预先指定也可以由vector 默认指定,这个大小即capacity ()函数

的返回值。当存储的数据超过分配的空间时vector 会重新分配一块内存块,但这样的分配是很耗时的,效率非常低。

2、deque(队列):它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个

映射结构中保存对这些块及其顺序的跟踪。向deque 两端添加或删除元素的开销很小,它不需要重新分配空间。
3、list(列表):是一个线性链表结构,它的数据由若干个节点构成,每一个节点都包括一个信息块(即实际存储的数据)、

一个前驱指针和一个后驱指针。它无需分配指定的内存大小且可以任意伸缩,这是因为它存储在非连续的内存空间中,

并且由指针将有序的元素链接起来。
4、set, multiset, map, multimap 是一种非线性的树结构,具体的说采用的是一种比较高效的特殊的

平衡检索二叉树—— 红黑树结构。

各种容器优劣分析

1、Vector:
优点:
  A、支持随机访问,访问效率高和方便,它像数组一样被访问,即支持[ ] 操作符和vector.at()。
  B、节省空间,因为它是连续存储,在存储数据的区域都是没有被浪费的,但是要明确一点vector 大多情况下并不是满存的,在未存储的区域实际是浪费的。
缺点:
  A、在内部进行插入、删除操作效率非常低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值