0%

STL容器

STL

STL(Standard Template Library)是C++标准库的一部分,提供了一组通用的数据结构和算法,以便开发者能高效地处理常见的编程任务

vector

1
2
3
4
5
6
7
8
// size()  返回元素个数
// empty() 返回是否为空
// clear() 清空
// front()/back()
// push_back()/pop_back()
// begin()/end()
// []
// 支持比较运算,按字典序

pair

1
2
3
// first, 第一个元素
// second, 第二个元素
// 支持比较运算,以first为第一关键字,以second为第二关键字(字典序)

string

1
2
3
4
5
// size()/length()  返回字符串长度
// empty()
// clear()
// substr(起始下标,(子串长度)) 返回子串
// c_str() 返回字符串所在字符数组的起始地址

queue

1
2
3
4
5
6
// size()
// empty()
// push() 向队尾插入一个元素
// front() 返回队头元素
// back() 返回队尾元素
// pop() 弹出队头元素

priority_queue

1
2
3
4
5
6
// size()
// empty()
// push() 插入一个元素
// top() 返回堆顶元素
// pop() 弹出堆顶元素
// 定义成小根堆的方式:priority_queue<int, vector<int>, greater<int>> q;

stack

1
2
3
4
5
// size()
// empty()
// push() 向栈顶插入一个元素
// top() 返回栈顶元素
// pop() 弹出栈顶元素

deque

1
2
3
4
5
6
7
8
// size()
// empty()
// clear()
// front()/back()
// push_back()/pop_back()
// push_front()/pop_front()
// begin()/end()
// []

set map multiset multimap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//基于平衡二叉树(红黑树)

// size()
// empty()
// clear()
// begin()/end()
// ++, -- 返回前驱和后继,时间复杂度 O(logn)

// set/multiset
// insert() 插入一个数
// find() 查找一个数
// count() 返回某一个数的个数
// erase()
// (1) 输入是一个数x,删除所有x O(k + logn)
// (2) 输入一个迭代器,删除这个迭代器
// lower_bound()/upper_bound()
// lower_bound(x) 返回大于等于x的最小的数的迭代器
// upper_bound(x) 返回大于x的最小的数的迭代器
// map/multimap
// insert() 插入的数是一个pair
// erase() 输入的参数是pair或者迭代器
// find()
// [] 注意multimap不支持此操作。 时间复杂度是 O(logn)
// lower_bound()/upper_bound()

unordered_set unordered_map unordered_multiset unordered_multimap

1
2
// 和上面类似,增删改查的时间复杂度是 O(1)
// 不支持 lower_bound()/upper_bound(), 迭代器的++,--

bitset

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// bitset<10000> s;
// ~, &, |, ^
// >>, <<
// ==, !=
// []

// count() 返回有多少个1

// any() 判断是否至少有一个1
// none() 判断是否全为0

// set() 把所有位置成1
// set(k, v) 将第k位变成v
// reset() 把所有位变成0
// flip() 等价于~
// flip(k) 把第k位取反