vector, 变长数组, 倍增的思想: 系统为某一程序分配空间时,所需时间与空间大小无关,
与申请次数有关
a.size(); // 返回a所含元素个数
a.empty(); // 返回a是否为空
clear(); // 清空
front()/back() // 返回vector第一个/最后一个数
push_back()/pop_back() // 在vector末尾加一个数/删掉一个数
begin()/end() // 迭代器 a[0] / a[a.size()]
[]
支持比较运算, 按字典序
pair<int, int>
first, 第一个元素
second, 第二个元素
支持比较运算, 以first为第一关键字, 以second为第二关键字(按字典序)
string, 字符串, substr(), c_str()
size()/length() 返回字符串长度
empty()
clear()
queue, 队列
size()
empty()
push() 向队尾插入一个元素
front() 返回队头元素
back() 返回队尾元素
pop() 弹出队头元素
priority_queue, 优先队列
push()
top()
pop()
定义成小根堆的方式: priority_queue<int, vector<int>, greater<int>> q;
stack, 栈
size()
empty()
push() 插入一个元素
top() 返回栈顶元素
pop() 弹出栈顶元素
deque, 双端队列(加强版vector),
size()
empty()
clear()
front()/back() 返回第一/个最后元素
push_back/pop_back()
push_front/pop_front()
begin()/end()
[]
set, map, multiset, multimap, 基于平衡二叉树(红黑树), 动态维护有序数列
size()
empty()
clear()
begin()/end() 支持++ -- 操作,返回前驱后继迭代器,时间复杂度O(log n)
set/multiset
insert() 插入一个数 时间复杂度 O(log n)
find() 查找一个数
count() 返回某一个数个数
erase()
(1) 输入一个数x,删除所有x 时间复杂度 O(k + log n) k是x个数
(2) 输入一个迭代器,删除这个迭代器
lower_bound()/upper_bound()
lower_bound(x) 返回大于等于x的最小的数的迭代器
upper_bound(x) 返回大于x的最小的数的迭代器
map/multimap
insert() 插入的参数是一个pair
erase() 插入的参数是一个pair或者迭代器
find()
[] 像用数组一样用map(索引) 注意时间复杂度O(log n)
lower_bound()/upper_bound()
unordered_set, unordered_map, unordered_multiset, unordered_multimap,哈希表
和上面类似,增删改查的时间复杂度时 O(1)
不支持 lower_bound()/upper_bound(),迭代器的++ --, (不支持基于排序的操作
bitset, 压位
bitset<10000> s;
~, &, |, ^
>>, <<
==, !=
[]
count() 返回有多少个1
any/none()
any() 判断至少是否有一个1
none() 判断是否全为0
set() 把所有位设为1
set(k, v) 把第k位设为v
reset() 把所有位设为0
flip() 等价于~
flip(k) 把第k位取反
- $vector$
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#inlude <vector>
using namespace std;
int main()
{
// Initialize
vector<int> a;
vector<int> a(n); // 定义长度为n的vector
vector<int> a(10); // 定义长度为10的vector
vector<int> a(10, 3); // 定义长度为10的vector, 每个元素是3
vector<int> a[10]; // 定义10个vector
// vector支持函数
// size() empty() 所有容器都有
return 0;
}
- $pair$
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#inlude <vector>
using namespace std;
int main()
{
pair<int, string>p;
p = make_pair(10, "gl");
p = {20, "abc"};
}
-
$string$
…
…
… -
$set~multiset$
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#inlude <set>
using namespace std;
int main()
{
set<int> S; // set里不能有重复元素,重复插入会被忽略
multiset<int> MS; // multiset里可以有重复元素
return 0;
}
- $map~multimap$
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#inlude <map>
using namespace std;
int main()
{
unordered_map<string, int> a;
return 0;
}