C++标准模板库(STL)封装了大量十分有用的数据结构和算法,熟练使用STL将会使我们的程序编写如虎添翼。接下来会介绍几种在程序竞赛中常用到的STL类。如果想了解更多,推荐直接访问官方文档搜索查阅
[TOC]
bitset
可以理解为bit这个数据类型的数组(即取值只为0/1),大多数情况下,每个元素所占内存确实只有1bit,是bool类型的1/8。方便各种位操作的进行。
构造方法
都需要在定义时指明长度
1 | 默认: |
位操作
1 | []: |
整体操作
1 | to_string() //convert to std::string |
priority_queue
优先队列(默认)的本质是一个大根堆,它的top元素始终是最大的。
优先队列的底层container默认是vector。
构造方法
1 | std::priority_queue<int, std::vector<int>, std::greater<int> > pq(first,last); |
成员函数
1 | .empty(): return true if it's empty |
pair
保存了一个有序对,两个元素分别为first和second,可以有不同类型
重载函数
1 | 头文件<utility> |
构造
1 | 普通构造方式略。 |
lower_bound
参数(first, last, x),原数组已从小到达排序
在[first, last)中找到第一个>=x的元素的位置
upper_bound是找到第一个>x的元素位置
这两个函数中,如果找不到满足要求的,返回last
auto
可遍历vector和map
1 | int main() |
输出1、2、3
可见是按照key值遍历组成map的这些pair
string
1 | string::substr() |
map
1 | 重载[](key_type k) |
vector
可用vector:reserve(n)进行预先内存分配
vector成员函数
1 | .back()取最后一个元素值 |
set
内部是一棵红黑树,有序存储元素。(默认升序)
1 | set.erase(iterator或value):返回删除元素的下一个iterator 或 |