vector, 变长数组, 倍增的思想
定义方式:
vector<int> a;
vector<int> a(n);
vector<int> a(10, 2);
基本操作:
a.size(); 返回元素个数
a.empty(); 返回是否为空
a.clear(); 清空
a.front(); 返回第一个数
a.back(); 返回最后一个数
a.push_back(); 在末尾插入一个数
a.pop_back(); 删除最后一个数
迭代器:
a.begin();第一个数
a.end(); 最后一个数后面一个数
[]
三种遍历方式:
for(int i = 0; i < a.size(); i ++ ) cout << a[i] << " "
for(vector<int>::iterator i = a.begin(); i != a.end(); i ++ ) cout << *i << " ";
for(auto x : a) cout << x << " ";
比较运算:
按字典序比较
vector<int> a(4, 3); vector<int> a(3, 4);
a < b;
pair<int, int>, 二元组
定义方式:
pair<int, string> p;
初始化方式:
p = make_pair(10, "zyf")
p = {10, "zyf"};
基本操作:
p.first 第一个数
p.second 第二个数
比较运算:
按字典序,以first为第一关键字,second为第二关键字(字典序)
需要存三个东西的时候:
pair<int, pair<int, int>> p;
string,字符串
基本操作:
str += "cc"; 在末尾添加字符串 或者 字符
str.size(); 返回字符串个数
str.length(); 返回字符串个数
str.empty(); 判是否为空
str.clean(); 清空
str.substr(a, b); 返回 a 位置返回 b个长度的字符串
// 当 b > str.size() 时,返回全部字符串即可
// 省略 b 时,默认输出到最后
printf("%s", str.c_str()); printf输出字符串的方式
queue,队列
基本操作:
q.size(); 返回长度
q.empty(); 判空
q.push(); 向队尾插入一个元素
q.front(); 返回队头元素
q.back(); 返回队尾元素
q.pop(); 弹出队头元素
注意:
quene无clear 函数
但是可以重新定义一下
q = queue<int>();
priority_queue, 优先队列(默认大根堆)
基本操作:
h.push(); 插入一个元素
h.top(); 返回堆顶元素
h.pop(); 弹出堆顶元素
变成小根堆的方式:
①:h.push(-x);
②:priority_queue<int, vector<int>, greater<int>> heap;
stack, 栈
s.size();
s.empty();
s.push() 在栈顶插入一个元素
s.top() 返回栈顶元素
s.pop() 弹出栈顶元素
deque, 双端队列
dq.size();
dq.empty();
dq.clear();
dq.front();
dq.back();
dq.push_back() / dq.pop_back();
dq.push_back() / dq.pop_back();
dq.begin() / dq.end();
[]
set, multiset, map, multimap;
基本操作:
size();
empty();
clear();
begin()/end();
++, --;返回前驱和后继
set/multiset
set 不能有重复元素
multiset 可以有重复元素
insert() 插入一个数
find() 查找一个数,找不到返回end的迭代器
count 返回某一个数的个数
erase();
(1) 输入的是一个数 x , 删除所有 x
(2) 输入一个迭代器,删除这个迭代器
lower_bound()/upper_bound();
lower_bound(x) 返回大于等于x的最小数的迭代器
upper_bound(x) 返回大于x的最小的数的迭代器
map/multimap
insert(); 插入的数是一个pair
erase(); 输入的查收南湖是pair 或者迭代器
find();
[]
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位取反