STL-容器
序列容器
序列容器实现能按顺序访问的数据结构。
有如下容器:
vector
:动态数组deque
:双端队列list
:双向链表array
:C 风格的固定大小的数组 C++11forward_list
:单向链表。性能比 list 略好,基本和 C 中的链表无异 C++11inpalce_vector
:可动态调整大小的固定容量原位连续数组 C++26
一般操作
构造
省略返回类型以及一些无关紧要的参数类型。
()
:默认无参数构造(&& other)
:拷贝构造(it1, it2)
:从另一个 vector 的迭代器构造,得到子 vector(count, T element)
:含 count 个 element
赋值
- 赋值号
assign
函数。和构造函数参数是一致的。swap
交互两个容器。
元素访问
operator[]
。数组的访问方式。可以访问任意下标的元素。at(index)
。访问下标 index 处的元素。
元素操作
push_front(T e)
push_back(T e)
:头尾部加入元素pop_back()
pop_front()
:尾部删除insert(it, T e) / insert(it, count, T e)
:it 处插入一个或多个 eerase(it) / erase(it1, it2)
:it 处删除 / [it, it2) 处删除clear()
:清空
push_back V.S. emplace_back tl dr. 如果传入的是构造参数,后者直接在vector里构造,效率比前者更高。 如果传入的是一个已经构造好的对象,二者是一样的。 如果感兴趣,网上有很多详细的解析。
说明
vector
没有头部加入和删除元素。 insert,erase 和 clear 复杂度 $O(n)$
deque
列出的函数都有。
list
remove(T e)
:移除和 e 相等的元素
关联容器
关联容器实现能快速查找($O(log n)$ 复杂度)的有序数据结构。
有如下容器:
set
:集合multiset
:多重集合map
:映射multimap
:多重映射
相关操作
set, map 大部分插入、删除与搜索都是 $O(logn)$ 的。
构造
()
:默认无参构造<key, comp>()
:自定义仿函数 comp。默认为std::less
对 set/multiset
(&&)
:移动构造(it1, it2)
:从序列容器构造(int first, int last)
:构造 first 到 last 的数字集合。左闭右开
赋值
只有赋值号和 swap
。
元素访问
仅限 map
operator[]
和at()
元素查找
find(T& key)
:找到为 key 的第一个元素,返回迭代器。count(T& key)
:返回 key 的数目。对于 set 和 map 只会返回 0 和 1。equal_range(T& key)
:找到一个 range,之中每一个元素都等于 key。返回 range 首尾迭代器组成的 pair。lower_bound(T& key)
:找到第一个不小于 key 的元素的迭代器。(也就是包含自身)upper_bound(T& key)
:找到第一个大于 key 的迭代器。(也就是不包含自身)
元素操作
insert
emplace
:插入元素clear
:清空erase(T& key)
erase(it)
:通过元素或者迭代器删除元素
参考
CppReference