使用STL需要我们了解容器及其对应的成员函数和成员变量,不求全部背诵,但是要有个印象,方便文档查询和算法使用,下表罗列了算法竞赛中STL常用函数和变量:
类别 | 名称 | 功能说明 | 适用容器 |
容量相关 | size() | 返回当前元素个数 | 全部容器 |
empty() | 判断容器是否为空 | 全部容器 | |
max_size() | 返回容器可容纳的最大元素数 | 全部容器 | |
capacity() | 返回当前分配的内存容量(仅vector/string) | vector, string | |
reserve(n) | 预分配内存空间 | vector, string, deque | |
shrink_to_fit() | 释放多余内存 | vector, string, deque | |
访问元素 | operator[] | 通过下标访问元素 | vector, deque, array, map, unordered_map |
at(n) | 带边界检查的访问 | vector, deque, array, map, unordered_map | |
front() | 访问第一个元素 | 序列容器 | |
back() | 访问最后一个元素 | 序列容器(除forward_list) | |
data() | 返回指向底层数组的指针 | vector, array, string | |
迭代器 | begin()/end() | 返回首尾迭代器 | 全部容器 |
cbegin()/cend() | 返回常量迭代器 | 全部容器 | |
rbegin()/rend() | 返回反向迭代器 | 支持反向遍历的容器 | |
crbegin()/crend() | 返回常量反向迭代器 | 支持反向遍历的容器 | |
修改操作 | push_back(value) | 在尾部添加元素 | vector, deque, list, string |
push_front(value) | 在头部添加元素 | deque, list, forward_list | |
pop_back() | 删除尾部元素 | vector, deque, list, string | |
pop_front() | 删除头部元素 | deque, list, forward_list | |
insert(position, value) | 在指定位置插入元素 | 序列容器 | |
emplace(position, args) | 原位构造插入 | 序列容器 | |
erase(position) | 删除指定位置元素 | 序列容器 | |
clear() | 清空所有元素 | 全部容器 | |
resize(n) | 调整容器大小 | 序列容器 | |
swap(container) | 交换两个容器内容 | 全部容器 | |
关联容器专用 | find(key) | 查找指定键的元素 | 关联容器 |
count(key) | 统计键的出现次数 | 关联容器 | |
lower_bound(key) | 返回第一个不小于key的元素 | 有序关联容器 | |
upper_bound(key) | 返回第一个大于key的元素 | 有序关联容器 | |
equal_range(key) | 返回匹配键的范围 | 关联容器 | |
insert(value) | 插入元素 | 关联容器 | |
erase(key) | 删除指定键的元素 | 关联容器 | |
emplace(args) | 原位构造插入 | 关联容器 | |
特殊操作 | merge(container) | 合并两个有序容器 | list, forward_list |
splice(position, container) | 转移元素 | list, forward_list | |
remove(value) | 删除所有匹配元素 | list, forward_list | |
unique() | 删除连续重复元素 | list, forward_list | |
sort() | 排序容器元素 | list, forward_list | |
reverse() | 反转元素顺序 | list, forward_l | |
容量相关 | size() | 返回当前元素个数 | 全部容器 |
empty() | 判断容器是否为空 | 全部容器 | |
max_size() | 返回容器可容纳的最大元素数 | 全部容器 | |
访问元素 | operator[] | 通过下标访问元素 | vector, deque, array, map, unordered_map |
at(n) | 带边界检查的访问 | vector, deque, array, map, unordered_map | |
front() | 访问第一个元素 | 序列容器 | |
back() | 访问最后一个元素 | 序列容器(除forward_list) | |
修改操作 | push_back(value) | 在尾部添加元素 | vector, deque, list |
push_front(value) | 在头部添加元素 | deque, list, forward_list | |
pop_back() | 删除尾部元素 | vector, deque, list | |
pop_front() | 删除头部元素 | deque, list, forward_list | |
insert(position, value) | 在指定位置插入元素 | 序列容器 | |
erase(position) | 删除指定位置元素 | 序列容器 | |
clear() | 清空所有元素 | 全部容器 | |
迭代器 | begin()/end() | 返回首尾迭代器 | 全部容器 |
cbegin()/cend() | 返回常量迭代器 | 全部容器 | |
rbegin()/rend() | 返回反向迭代器 | 支持反向遍历的容器 | |
特殊操作 | find(key) | 查找元素(关联容器) | set, map, unordered_set, unordered_map |
count(key) | 统计元素出现次数 | 关联容器 |
该表展示了STL容器常用成员函数和成员变量,读者没必要死记硬背,仅需在使用时查看即可,常做算法题的话肯定会练熟的。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程