.empty();//空返回true 非空返回false
vector
1 2 3 4 5 6 7 8 9 10 11 12
| #include<vector> vector<int> a(n,x); for(auto item: a){ cout<<item<<" "; } a.size(); a.empty(); a.clear(); a.front()/a.back() a.push_back()/a.pop_back() a.begin() a.end()
|
pair
比一般的结构体多实现了比较函数
1 2 3
| pair<int,string> p; p.first()/p.second() pair<int,pair<int,string>>p;
|
string 字符串
1 2 3 4 5
| string s; s.size()/s/length() s.substr(n,m); s.c_str(); printf("%s",s.c_str());
|
queue 队列
1 2 3 4 5 6 7 8 9
| #include<queue> queue<int> q; q.size(); q.empty(); q.push(); q.front(); q.back(); q.pop();
|
虽然没有clear函数 但可以通过构造新队列初始化 如下
1 2 3 4
| queue<int>q; q=queue<int> ();
q=queue<int> {};
|
priority_queue 优先队列 (堆)
1 2 3 4 5 6 7 8 9 10
| priority_queue<int>q; q.push(); q.top(); q.pop(); priority_queue<int,vector<int>,greater<int>>q;
for(auto item:(vector<int>&)q){ cout<<item<<" "; }
|
如果是大根堆的话 定义结构体需要重载小于号
1 2 3 4 5 6 7 8
| struct node{ int a,b; bool operator < (const node& t) const { return a < t.a; } }; priority_queue<node>q; q.push({1,2});
|
如果是大根堆的话 定义结构体需要重载大于号
1 2 3 4 5 6 7
| struct node{ int a,b; bool operator > (const node& t) const{ return a>t.a; } }; priority_queue<node,vector<node>,greater<node>> q;
|
栈 stack
1 2 3 4 5 6 7
| #include<stack> stack<int>stk; stk.size(); stk.empty(); stk.push(); stk.top(); stk.pop();
|
deque 双端队列
速度比一般的数组慢上几倍
1 2 3 4 5 6 7 8
| #include<deque> deque<int>q; q.front(); q.back(); q.push_front()/q.push_back() q.size(); q.clear(); q.begin()/q.end();
|
set/multiset map/multimap 基于平衡二叉树(红黑树) 动态维护有序序列
支持以下操作
1 2
| size(),empty(),clear() begin(),end(); ++ -- 返回前驱和后继(前一个迭代器) 时间复杂度为o(logn)
|
set/multiset
set容器中元素不能重复而multiset可以
1 2 3 4 5 6 7
| insert(); find(); count(); erase(); lower_bound(); upper_bound();
|
map/multimap
1 2 3 4 5 6 7
| map<PII,int>mp; mp.insert({a,b}); insert(); erase(); find(); 支持[] lower_bound()/upper_bound()
|
无序容器 (哈希容器(也叫散列表))
unordered_set unordered_map unordered_multiset unordered_multimap
和上面操作类似
1 2
| 优点: 增删改查的时间复杂度为O(1),set map容器的时间复杂度为O(logn)基于红黑树的高度 缺点: 不支持lower_bound()和upper_bound()操作 也不支持迭代器的++ --
|
bitset 压位运算
& 按位与 : 如果对应位都为1,那么结果就是1;如果任意一个位是0,则结果就是0
| 按位或 : 与& 的区别在于 如果对应位中任一个操作数为1 那么结果就是1(不需要两个对应位都为1)
~ 取反 : 对位求反 1变0, 0变1
^ 按位异或 : 跟 | 类似, 但有一点不同的是 如果两个操作位都为1的话,结果产生0
<<左移 >>右移
== !=
[]
1 2 3 4 5 6 7 8 9 10 11 12
| bitset<N> bst; count();
any(); none();
set();; set(k,v); reset();
flip(); flip(k);
|