C++标准库容器分类

【投稿赢 iPhone 17】「我的第一个开源项目」故事征集:用代码换C位出道! 10w+人浏览 1.7k人参与

 

C++标准库容器分类

C++标准库提供了多种容器,根据其存储方式和特性可分为以下几类:

序列容器(Sequence Containers)

  • vector:动态数组,支持快速随机访问,尾部插入/删除高效。
  • deque:双端队列,支持头尾高效插入/删除,随机访问性能略低于vector
  • list:双向链表,任意位置插入/删除高效,但不支持随机访问。
  • forward_list(C++11):单向链表,内存占用更小,仅支持单向遍历。
  • array(C++11):固定大小数组,编译时确定尺寸,无动态内存分配。

关联容器(Associative Containers)

  • set:有序唯一键集合,基于红黑树实现,查找复杂度O(log n)。
  • multiset:允许重复键的有序集合。
  • map:键值对集合,键唯一且有序。
  • multimap:允许重复键的有序键值对集合。

无序关联容器(Unordered Associative Containers, C++11)

  • unordered_set:哈希表实现的唯一键集合,平均查找复杂度O(1)。
  • unordered_multiset:允许重复键的哈希集合。
  • unordered_map:哈希表实现的键值对集合。
  • unordered_multimap:允许重复键的哈希键值对集合。

容器适配器(Container Adapters)

  • stack:基于deque/list/vector的LIFO(后进先出)结构。
  • queue:基于deque/list的FIFO(先进先出)结构。
  • priority_queue:基于vector的优先队列,默认最大堆。

选择容器的关键因素

  • 访问模式:频繁随机访问优先选vectorarray;大量插入/删除考虑listforward_list
  • 排序需求:需要有序数据使用关联容器;无需排序且追求速度用无序容器。
  • 内存开销:连续内存容器(如vector)缓存友好,但扩容可能代价高;链表容器(如list)无扩容问题但内存碎片化更严重。

代码示例:容器声明

#include <vector>
#include <unordered_map>
#include <stack>

std::vector<int> vec = {1, 2, 3};          // 动态数组
std::unordered_map<std::string, int> umap; // 哈希表
std::stack<double> stk;                    // 栈适配器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

std7879

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

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

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

打赏作者

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

抵扣说明:

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

余额充值