C++ STL 总结
vector
变长数组
- 用途
- 存储数据,尤其是数量不定的时候
- 可以用于实现图的邻接表
- 方法
- 迭代器: vector::iterator it;
- 下标访问: vi[1]
- push_back()
- pop_back()
- insert(it, x)
- size() clear() empty()
- erase(it) erase(it_begin, it_end)
set
内部使用红黑树,自动有序,不含重复元素的“数组” (unordered_set 是用hash实现的)
- 用途
- 去掉重复元素,保留元素本身,不考虑它的个数 (去重)
- 方法
- 迭代器: set::iterator it;
- insert(x)
- find(value)
- erase(it) erase(value) erase(it_begin, it_end)
- size() clear() empty()
string
- 方法
- 迭代器 string::iterator it
- 下标访问 str[i]
- 加法 + +=
- 比较 == != < <= > >= 比较规则是字典序
- length() / size()
- insert:
- insert(pos_idx, string)
- insert(it, it_begin, it_end)
- erase:
- erase(it)
- erase(pos, length)
- erase(it_begin, it_end)
- substr:
- substr(pos, length)
- clear() O(1)
- string::npos == -1 unsigned_int 或 4294967295
- find()
- find(str)
- find(str, pos)
- replace:
- replace(pose, len, str2)
- replace(it_b, i_e, str2)
map
数组是int->任意类型的映射,map是任意类型->任意类型的映射
- 用途
- 建立字符(串)->int/string映射,减少代码量
- 判断大整数或者其他类型的数据是否存在,用作bool数组
- 方法
- 迭代器访问 map<type1, type2>::iterator it
- 下标访问 mp[example] 也可以赋值
- find(key) 返回 iter, iter->first, iter->second
- erase:
- erase(it)
- erase(key)
- erase(it_begin, it_end)
- size() clear() empty()
queue
队列,先进先出的数组
-
用途
- 广度优先搜索
-
方法
- 访问:front() 队头 back() 队尾
- push(value)
- pop()
- empty() size() 没有clear() 可以直接新建一个queue
priority_queue
带优先级的队列,其实是个堆,队首元素一定是优先级最高的那个,每一次出队入队都会进行排序
-
用途
- 贪心问题
- 优化迪杰斯特拉算法
-
方法
- 访问: 只有 top() 访问队首元素
- push(value) O(logN)
- pop() O(logN)
- empty() size()
stack
后进先出的容器
- 用途
- 模拟递归
- 方法
- 访问: 只有top()访问栈顶元素
- push(value) O(1)
- pop(value) O(1)
- empty() size()
pair
将两个元素绑在一起,类似内部包含两个元素的的结构体,first,second
- 用途
- 替代二元结构体及其构造函数,节省编码时间
- 作为map的键值对进行插入 mp.insert(make_pair(key, value))
- 方法
- 构造:
- pair<type1, type2> p (key, value);
- p = make_pair(key, value)
- p = pair<type1, type2>(key, value)
- 访问:
- p.first p.second 两个字段
- 比较: pair 可以直接== != < <= > >= 比较, 比较规则是先比first,当first相等时,比较second
- 构造:
algorithm
- max(x, y) min(x, y) abs(x)
- swap(x, y)
- reverse(it_begin, it_end) 翻转序列元素排列
- next_permutation(it_begin, it_end)
- fill(it_begin, it_end, value) 把序列中每一个元素赋值为value
- sort(it_begin, it_end, cmp) > 降序 < 升序
- lower_bound(it_begin, it_end, value) upper_bound(it_b, it_e, value) 返回有序序列中,value的第一个出现的指针或者it,以及最后出现位置的下一个位置的指针

5592

被折叠的 条评论
为什么被折叠?



