这段时间噬月在进行数据结构和算法的复习和学习!
这篇博客将包括C++STL的简单介绍。
本篇算法模板来自AcWing的y总。
STL
关于STL的讲解是老生常谈,而且比较机械;本篇博客只是希望梳理一下一些常用的模板,并没有剖析源码的打算(主要是因为菜),因此就简单罗列一下各个模板。
vector
变长数组,倍增的思想。
拥有下列方法:
1 | size() 返回元素个数 |
pair
不一定装int
,标题中以int
为例。
拥有下列方法:
1 | first, 第一个元素 |
string
字符串。
拥有下列方法:
1 | size()/length() 返回字符串长度 |
queue
队列。
拥有下列方法:
1 | size() |
priority_queue
优先队列,默认是大根堆。
拥有下列方法:
1 | push() 插入一个元素 |
定义成小根堆的方式:priority_queue<int, vector<int>, greater<int>> q;
stack
栈。
拥有下列方法:
1 | size() |
deque
双端队列。
拥有下列方法:
1 | size() |
set, map, multiset, multimap
基于平衡二叉树(红黑树),动态维护有序序列。
拥有下列方法:
1 | size() |
unordered_set, unordered_map, unordered_multiset, unordered_multimap
哈希表。
拥有的方法和上面类似,增删改查的时间复杂度是 O(1)。不支持lower_bound()/upper_bound()
,以及迭代器的自增自减。
bitset
圧位。
所谓压位,个人理解为当bool数组占用空间过大使用它来减小空间开支——毕竟,顾名思义,“bitset”作为“比特集”,每个元素只占用一个二进制位(而bool占用一个字节,即八个二进制位)。声明方式:bitset<10000> s;
支持下列操作/方法:
1 | ~, &, |, ^ |