顺序容器
容器名称 初始化 赋值 元素存取 大小 插入和删除 扩展 string 默认 带参数 拷贝 运算符重载 = /.assgin(){2种} [] /.at() size(),strlen(),empty() insert() erase() clear() 拼接:+/append() 查找: find()/rfind() 替换:replace() 子串: substr() 比较: compare() vector 默认 带参数 拷贝 运算符重载 = /.assgin() {2种} [] /.at() size(),resize(),reserve(),capacity(),empty() push_back() pop_back() insert(){2种} erase(){2种} clear() deque 默认 带参数 拷贝 运算符重载 = /.assgin(){2种} [] /.at() size() resize() empty() push_front() pop_front() push_back() pop_back() insert(){2种} erase(){2种} clear() list 默认 带参数 拷贝 运算符重载 = /.assgin(){2种} 只有迭代器,不能随机存取 size() resize() empty() push_front() pop_front() push_back() pop_back() insert(){2种} erase(){2种} clear() stack 只 有 5 种 方法 push() pop() top() size() empty() queue 只 有 6 种 方法 push() pop() front() back() size() empty()
关联型容器
容器名称 初始化 赋值 元素存取 大小 插入和删除 查找 set 默认 拷贝 运算符重载 = iterator且不能用iterator改变容器中的值 size() empty() insert(ele) erase(){3种} clear() find() upper_bound() lower_bound() equal_range() multiset 同上multiset允许set容器中元素值重复 map 默认 拷贝 运算符重载 = [] iterator且不能用iterator改变容器中的值 size() empty() insert( pair<class T,class T>
(xx,xx)) insert(make_pair(xx,xx)) insert(map<class T, class T>
:: value_type(xx,xx)) erase(){3种} clear()multimap 同上multimap允许map容器中key值重复
STL容器使用时机
-
deque 的使用场景: 比如排队购票系统, 对排队者的存储可以采用 deque, 支持头容器 vector deque list set multiset map multimap 结构 单端数组 双端数组 双向链表 二叉树 二叉树 二叉树 二叉树 随机存取 可 可 no no no 对key:可 no 元素搜索 慢 慢 很慢 快 快 对key:快 对key:快 元素插入 末端 首尾两段 任意位置 - - - -
端的快速移除, 尾端的快速添加。 如果采用 vector, 则头端移除时, 会移动大量的
数据, 速度慢。
vector 与 deque 的比较:
一: vector.at()比 deque.at()效率高, 比如 vector.at(0)是固定的, deque 的开始位置却
是不固定的。
二: 如果有大量释放操作的话, vector 花的时间更少, 这跟二者的内部实现有关。
三: deque 支持头部的快速插入与快速移除, 这是 deque 的优点。
list 的使用场景: 比如公交车乘客的存储, 随时可能有乘客下车, 支持频繁的不确实
位置元素的移除插入。
set 的使用场景: 比如对手机游戏的个人得分记录的存储, 存储要求从高分到低分的
顺序排列。
map 的使用场景: 比如按 ID 号存储十万个用户, 想要快速要通过 ID 查找对应的用
户。 二叉树的查找效率, 这时就体现出来了。 如果是 vector 容器, 最坏的情况下可
能要遍历完整个容器才能找到该用户