STL
vector(变长数组)
常用函数 | 作用 |
---|---|
size() | 返回元素个数 |
empty() | 返回是否是空 |
clear() | 清空 |
front() | 返回vector的第一个数 |
back() | 返回vector的最后一个数 |
push_back() | 向vector的最后插入一个数 |
pop_back() | 把vector的最后一个数删掉 |
begin() | vector的第0个数 |
end() | vector的最后一个的数的后面一个数 |
遍历方法:
对于 vector <int> a
for(int i = 0;i < a.size();i ++) cout<<a[i]<<" ";
for(vector <int>::iterator i = a.begin();i != a.end();i ++) cout<<*i<<" ";
注:vector <int>::iterator
可以写为auto
for(auto x : a) cout<< x <<" ";
倍增的思想:
系统为某一程序分配空间是,所需时间,与空间大小无关,与申请次数有关
pair
支持比较运算,以first为第一关键字,以second为第二关键字(按字典序)
定义:
pair <类型,类型> 变量名;
两个类型可以不同
初始化方式:
假设有个pair <int,string> p
;
p = make_pair(10,"abc");
p = {10,"abc");
常用函数 | 作用 |
---|---|
first() | 第一个元素 |
second() | 第二个元素 |
string
常用函数 | 作用 |
---|---|
substr() | 返回每一个子串 |
c_str() | 返回这个string对应的字符数组的头指针 |
size() | 返回字母个数 |
length() | 返回字母个数 |
empty() | 返回字符串是否为空 |
clear() | 把字符串清空 |
queue(队列)
定义:
queue <类型> 变量名;
常用函数 | 作用 |
---|---|
size() | 队列的长度 |
empty() | 返回这个队列是否为空 |
push() | 往队尾插入一个元素 |
front() | 返回队头元素 |
back() | 返回队尾元素 |
pop() | 把队头弹出 |
注:队列没有clear
函数!
清空:
变量名 = queue <int> ();
priority_queue(优先队列,堆)
注:默认是大根堆!!!
定义:
大根堆:priority_queue <类型> 变量名
;
小根堆:priority_queue <类型,vecotr <类型>,greater <类型>> 变量名
常用函数 | 作用 |
---|---|
size() | 堆的长度 |
empty() | 返回堆是否为空 |
push() | 往堆中插入一个元素 |
top | 返回堆顶元素 |
pop() | 弹出堆顶元素 |
注:堆没有clear
函数!
stack(栈)
常用函数 | 作用 |
---|---|
size() | 栈的长度 |
empty() | 返回栈是否为空 |
push() | 向栈顶中插入一个元素 |
top | 返回栈顶元素 |
pop() | 弹出栈顶元素 |
deque(双端队列)
常用函数 | 作用 |
---|---|
size() | 双端队列的长度 |
empty() | 返回双端队列是否为空 |
clear() | 清空双端队列 |
front() | 返回第一个元素 |
pop() | 弹出栈顶元素 |
back | 返回最后一个元素 |
push_back() | 向最后插入一个元素 |
pop_back() | 弹出最后一个元素 |
push_front() | 向队首中插入一个元素 |
pop_front() | 弹出第一个元素 |
begin() | 双端队列的第0个数 |
end() | 双端队列的最后一个的数的后面一个数 |
set,map,multiset,multimap
基于平衡二叉树(红黑树),动态维护有序序列
set/multiset
注:set
不允许元素重复,如果有重复就会被忽略,但multiset
允许!
常用函数 | 作用 |
---|---|
size() | 返回元素个数 |
empty() | 判断是否为空 |
clear() | 清空 |
begin() | 第0个数,支持++ 或-- ,返回前驱和后继 |
end() | 第0个数,支持++ 或-- ,返回前驱和后继 |
insert() | 插入一个数 |
find() | 查找一个数 |
count() | 返回某一个数的个数 |
erase() | 输入是一个数x,删除所有 x 复杂度 O(k + log n ) 输入一个迭代器,删除这个迭代器 |
lower_bound(x) | 返回大于等于x的最小的数的迭代器 |
upper_bound(x) | 返回大于x的最小的数的迭代器 |
map/multimap
常用函数 | 作用 |
---|---|
insert() | 插入一个数,插入的数是一个pair |
find() | 查找一个数 |
erase() | (1)输入是pair(2)输入一个迭代器,删除这个迭代器 |
lower_bound(x) | 返回大于等于x的最小的数的迭代器 |
upper_bound(x) | 返回大于x的最小的数的迭代器 |
unordered_set,unordered_map,unordered_muliset,unordered_multimap
基于哈希表
和上面类似,增删改查的时间复杂度是O(1)
不支持lower_bound()
和upper_bound()
bitset(压位)
定义:
bitset <个数> 变量名;
支持:
~,&,|,^ >>,<< ==,!= []
常用函数 | 作用 |
---|---|
count() | 返回某一个数的个数 |
any() | 判断是否至少有一个1 |
none() | 判断是否全为0 |
set() | 把所有位置赋值为1 |
set(k,v) | 将第k 位变成v |
reset() | 把所有位变成0 |
flip() | 把所有位取反,等价于~ |
flip(k) | 把第k 位取反 |