C++进阶:STL容器总结

1.容器简介

1.1 顺序容器(序列容器)Sequence Container

容器 模板 特点
向量容器 vector 从后面快速插入与删除,可以直接访问任何元素。
双向列表容器 list 从任何地方快速插入与删除
双端链表容器 deque 从前面或者后面快速插入与删除,可以直接访问任何元素。

1.2 关联容器Associative Container

容器 模板 特点
映射容器 map 一对多映射,基于关键字快速查找,不允许重复值
多重映射容器 multimap 一对多映射,基于关键字快速查找,允许重复值
集合容器 set 快速查找,不允许重复值
多重集合容器 multiset 快速查找,允许重复值

1.3 容器适配器Container Adapter

容器 模板 特点
栈容器 stack 后进先出(LIFO)
队列容器 queue 先进后出(FIFO)
优先级队列容器 priority_queue 最高优先级元素先出

2. 容器通用操作

2.1 实例化

实例化方式 作用 顺序容器 关联容器 容器适配器
C <T> c 默认构造
C c(c1) 复制构造
C c(it_b,it_e) 范围构造
C c(n,t) 填充构造 × ×
C c(n) 初始化大小 × ×

2.2 重载运算符

运算符 作用 顺序容器 关联容器 容器适配器
= 赋值
== 比较
< 小于

2.3 迭代器

迭代器 作用 顺序容器 关联容器 容器适配器
c.begin() 头迭代器 ×
c.end() 尾迭代器 ×
c.rbegin() 反向头迭代器 ×
c.rend() 反向尾迭代器 ×

2.4 大小

函数 作用 顺序容器 关联容器 容器适配器
c.size() 大小
c.max_size() 最大大小 ×
c.empty() 判空

2.5 插入

函数 返回值 作用 顺序容器 关联容器 容器适配器
c.insert(p,t) iterator 插入一个元素 × ×
c.insert(p,n,t) void 插入n个连续元素 × ×
c.insert(p,it_b,it_e) void 插入范围元素 × ×
c.insert(t) iterator/pair<iterator,bool> 插入元素 × ×
c.insert(it_b,it_e) void 插入范围元素 × ×

2.6 删除

函数 返回值 作用 顺序容器 关联容器 容器适配器
c.erase(p) iterator 删除指定位置元素(注意返回值是iterator) × ×
c.erase(p,q) iterator 删除指定[p,q)范围连续元素(注意返回值是iterator) × ×
c.erase(k) size_type 删除指定键值的元素 × ×
c.erase(p) void 删除指定位置元素(注意返回值是void) × ×
c.erase(p,q) void 删除指定[p,q)范围连续元素(注意返回值是void) × ×
c.clear() void 删除所有元素 ×

3. 容器特有操作

3.1 顺序容器特有函数

  • 访问元素
函数 返回值 作用 vector list deque
c.front() 元素 获取第一个元素
c.back() 元素 获取最后一个元素
c.push_back(t) void 底部添加一个元素
c.pop_back() void 底部添加一个元素
c.push_front(t) void 头部添加一个元素 ×
c.pop_front() void 头部添加一个元素 ×
c[n]/c.at(n) 元素 随机获取元素 ×
  • 赋值/扩展
函数 返回值 作用 vector list deque
c.assign(n,t) void 多个连续赋值
c.assign(it_b,it_e) void 范围赋值
c.resize(n) void 大小扩展到n
c.resize(n,t) void 扩展并赋值

3.2 关联容器特有查找函数

函数 返回值 作用 map multimap set multiset
c.find(k) iterator 查找
c.count(k) size_type 统计
c.upper_bound(k) iterator 小于或等于k的第一个元素位置
c.equal_bound(k) pair<iterator,iterator> 等于k的开始和结束位置
c.key_comp() key_compare 键比较
c.value_comp() value_compare 值比较

3.3 容器适配器特有函数

函数 返回值 作用 stack queue priority_queue
c.push(t) void 压入元素
c.pop() void 弹出元素
c.top() 元素 顶部元素 ×
c.front() 元素 头部元素 × ×
c.back() 元素 底部元素 × ×

容器适配器不支持迭代器

3.4 list特有函数

  • 截取splice
  • 删除remove
  • 去重unique
  • 合并merge
  • 排序reverse
  • 反转sort

5. 其他

5.1 字符串

string.png

5.2 C++11增加容器



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • C++ 标准模板库(STL) 作者:AceTan,转载请标明出处! 0x00 何为STL## STL(Standa...
    AceTan阅读 10,406评论 3 44
  • 容器的概念所谓STL容器,即是将最常运用的一些数据结构(data structures)实现出来。容器是指容纳特定...
    饭饭H阅读 2,910评论 0 0
  • STL(标准模板库),是目前C++内置支持的library。它的底层利用了C++类模板和函数模板的机制,由三大部分...
    岁与禾阅读 39,283评论 3 132
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 13,144评论 1 51
  • 标签(空格分隔): STL 运用STL,可以充分利用该库的设计,让我为简单而直接的问题设计出简单而直接的解决方案,...
    认真学计算机阅读 5,342评论 0 10