找回密码
 立即注册
首页 业界区 业界 STL 容器

STL 容器

溶绚 2025-9-24 15:43:32
C++ STL(Standard Template Library)中主要提供了三大类通用容器,用于存储和管理不同类型和结构的数据。它们分别是:
STL 容器总览

容器类别容器说明序列式容器 (Sequence Containers)vector, deque, list, forward_list, array元素按插入顺序排列,类似数组关联式容器 (Associative Containers)set, map, multiset, multimap自动排序,基于平衡树(红黑树)无序关联容器 (Unordered Associative Containers)unordered_set, unordered_map, unordered_multiset, unordered_multimap无序哈希表,查找插入效率高容器适配器 (Container Adapters)stack, queue, priority_queue封装其他容器,提供特定行为序列式容器(有顺序,按位置存储)

容器名特点常见用途vector动态数组,支持随机访问,尾部插入快默认首选容器,替代 C 数组deque双端队列,支持首尾插入删除双端栈、滚动窗口list双向链表,插入删除快,不能随机访问频繁插入/删除位置稳定forward_list单向链表,内存更小(C++11)内嵌链表、只需前向遍历array定长数组,封装 C 风格数组(C++11)栈上存储,性能好,长度固定一、序列式容器特性对比速查表

特性维度vectorarraydequelistforward_list底层结构动态数组(连续内存)静态数组(连续内存)分段数组双向链表单向链表大小可变✅ 是❌ 否✅ 是✅ 是✅ 是(无 size())下标访问 ([], at())✅ 支持✅ 支持✅ 支持❌ 不支持❌ 不支持头部操作 (push_front)❌ 慢(需移动)❌✅ 高效✅ 高效✅ 高效尾部操作 (push_back)✅ 高效❌✅ 高效✅ 高效❌ 无此接口中间插入/删除❌ 慢(移动元素)❌⚠️ 中等偏慢✅ 高效✅ 但不方便空间管理函数✅ reserve()、shrink_to_fit()❌❌❌❌支持 data()✅✅✅(C++17 起)❌❌支持 size()✅✅✅✅❌(需手动计数)迭代器类型随机访问随机访问随机访问双向单向(forward only)STL算法兼容性✅ 全兼容✅ 全兼容✅ 全兼容⚠️ 不能用 std::sort()同左稳定性(指针/引用稳定)❌ 增删会失效✅❌✅ 稳定✅ 稳定排序支持std::sort()std::sort()std::sort().sort()(成员函数).sort()内存分配位置堆栈堆(分段)堆(节点)堆(节点)适用场景随机访问、连续优化、频繁尾部插入定长数组替代品、轻量双端队列、滑动窗口频繁中间修改单向处理流、大量前插、轻量链表deque 内存分块不支持空间管理函数,vector 是一片连续的内存,支持 data()、reserve()、shrink_to_fit() 等内存操作;
list 和forward_list内部结构是链表,没有下标操作,链表自带排序api;
array 在编译时就确定了大小,不能动态改变元素的数量,内存分配在栈上;

  • vector:适合连续内存优化,支持 data()、reserve()、shrink_to_fit() 等内存操作,尾部插入效率高,但头部和中间插入较慢。
  • array:固定大小的轻量容器,栈上分配,支持下标访问和 data(),不支持任何动态操作。
  • deque:支持头部和尾部插入操作,适合双端队列场景,但不支持空间管理函数,底层为分段内存结构。
  • list:双向链表容器,适合频繁的中间插入和删除,元素地址稳定,但不支持下标访问,也不能用 std::sort()(需要用成员 sort())。
  • forward_list:单向链表容器,接口更轻量,不支持尾部插入和 size(),只能使用 insert_after() / erase_after() 等后置操作,适合嵌入式或轻量场景。
二、共性 API 总结

几乎所有序列式容器都支持如下操作(但有些容器支持受限):
类别API说明容器大小size()返回当前元素个数empty()是否为空max_size()可容纳最大元素数元素访问front() / back()返回头/尾元素(不能用于 forward_list 的 back())迭代器begin() / end()常规迭代器cbegin() / cend()const 版本rbegin() / rend()反向迭代器修改操作insert()插入元素(forward_list 仅支持 after)erase()删除元素(forward_list 仅支持 after)push_back() / pop_back()尾部插入/删除(forward_list 无)push_front() / pop_front()头部插入/删除(vector 无)clear()清空容器resize()改变大小其他swap()交换两个容器assign()批量赋值(如指定区间或重复值)二、每个容器详细 API + 特性对比

1. vector
  1. #include <vector>
复制代码

  • std::vector 是一个动态数组容器
  • 元素连续存储,支持随机访问
  • 尾部插入/删除效率高,插入中间位置效率较低
std::vector 的常用构造函数构造函数

构造函数说明vector()默认构造,空容器vector(size_t n)创建含 n 个默认值元素的容器vector(size_t n, const T& val)创建含 n 个值为 val 的元素vector(initializer_list)使用花括号初始化列表构造(C++11)vector(iter1, iter2)通过迭代器区间构造vector(const vector& other)拷贝构造vector(vector&& other)移动构造(C++11)具体例子:
构造方式示例说明默认构造vector v;创建空容器指定大小vector v(5);创建 5 个默认元素(0)指定大小和值vector v(3, 9);创建 3 个值为 9 的元素初始化列表vector v = {1, 2};推荐用法,清晰直观区间构造vector v(v2.begin(), v2.end());从其他容器复制子区间拷贝构造vector v(v2);拷贝另一个 vector移动构造vector v(std::move(v2));高效转移所有权(C++11)示例代码:
[code]#include <vector>#include <vector>int main() {    // 1. 默认构造    std::vector v1;    std::cout

相关推荐

您需要登录后才可以回帖 登录 | 立即注册