C++ STL为使用者提供了一系列类模版,使用者在使用时,可以根据自己需要的数据类型将STL中的类模版实例化为自己所需类型。因此这些操作被称为STL容器操作,以下主要整理了一些做题中常用到的操作。
从数据的存储方式和允许的操作上来看,容器分类主要有:

(图像来源于https://oi-wiki.org/lang/csl/container/)
关于迭代器
迭代器是STL中容器共同支持的操作,其功能类似于指针。虽然对于顺序容器,使用下标进行操作可能更为直观,但是很多STL中的函数都使用迭代器作为输入参数/返回参数,因此有必要针对常用STL函数了解迭代器使用。
以下是几个较为常用的STL函数,适当使用会便于写程序和计算:
- sort(v.begin(), v.end(), cmp)
- find(v.begin(), v.end(), value) 返回对应迭代器
- binary_search(v.begin(), v.end(), value) 返回true/false
- merge(v1.begin(), v1.end(), v2.begin(), v2.end()) 合并两个有序序列
- lower_bound/upper_bound(v.begin(),v.end(),x) 必须有序序列,返回指向第一个大于等于/大于x的位置的迭代器。如果不存在这样的元素,则返回尾迭代器。原理是利用二分查找
- unique()相邻元素的去重,返回去重后结尾的迭代器,原容器大小不变,应该是采用交换到最后的办法
序列式容器
vector
- front()/back()返回元素引用
- insert()插入元素,复杂度线性
- push_back()/pop_back()
deque
- push_back()/pop_back()
- push_front()/pop_front()
list
双向链表
- front()/back()返回引用
- push_back()/pop_back()
- push_front()/pop_front()
- insert()
- merge()有序合并
关联式/无序关联容器
set
- insert()
- count()统计出现个数
- find()返回迭代器
map
- 可以通过直接赋值或者pair插入,也可以通过一个{}表插入
- find()返回迭代器(指向pair)
unordered_set
可能需要自定义hash函数:
struct my_hash {
size_t operator()(int x) const { return x; }
};
unordered_map
容器适配器
容器适配器不支持迭代器操作。
stack
queue
priority_queue
可能要自定义优先级,默认是大根堆less<int>
struct cmp
{
bool operator()(Node a, Node b)
{
return a.x>b.x;
}
};
- priority_queue<int, vector<int>, greater<int> >p;修改成小根堆
- top()
- pop()删除第一个元素
C++复习——STL容器操作
原文:https://www.cnblogs.com/hesun/p/13238180.html