1 STL分类:
1.1 容器:string、vector、deque/stack/queue、list、set、map、priority_queue、pair
- 序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置。
- 关联式容器:二叉树结构,各元素之间没有 严格的物理上的顺序关系
1.1.1 string 2020.07.20
- 赋值:重载运算符号 = | str.assign();
- 拼接:重载运算符号 += | str.append();
- 查找:str.find() | str.rfind()
- 替换:str.replace()
- 比较:s1.compare(s2) s1=s2 return 0;
- 存取:str[i] | str.at(i)
- 插入:str.insert(i, s1)
- 删除:str.erase(i, len)
- 子串:str.substr(i, len)
1.1.2 vector 2020.07.22
vector<T> v;
- 赋值:v.assign() | v() | v.push_back()
- 访问:vector<T>::iterator it = v.begin(); it != v.end(); it++; *it进行访问 | v.at(i) | v[i] | v.front() | v.back()
- 容量:v.empty() | v.capacity()
- 大小:v.resize(len, element)
- 插入:v.insert() | v.push_back()
- 删除:v.erase() | v.pop_back() | v.clear()
- 互换:v1.swap(v2) | vector<T>(v).swap(v)巧用匿名对象收缩内存
- 预留内存(没有初始化):v.reserve()
1.1.3 deque/stack/queue 2020.07.24
deque
- 双端数组,可以对头端进行插入删除操作
- deque与vector区别:
1.vector对于头部的插入删除效率低,数据量越大,效率越低
2.deque相对而言,对头部的插入删除速度回比vector快
3.vector访问元素时的速度会比deque快,这和两者内部实现有关
deque<T> d;
- 两端插入:d.push_front() | d.push_back()
- 两端删除:d.pop_front() | d.pop_back()
stack
stack<T> st;
- 插入:st.push();
- 读取栈顶:st.top();
- 删除栈顶:st.pop();
queue
queue<T> q;
- 插入:q.push();
- 读取:q.front() | q.back()
- 删除:q.pop()
1.1.4 list 2020.07.26
list<T> lst;
- 赋值:lst.assign() | lst1=lst2
- 交换:lst.swap()
- 访问:list<T>::iterator it = lst.begin(); it != lst.end(); it++; *it进行访问
- 容量:lst.empty() | lst.size()
- 大小:lst.resize(len, element)
- (两端)插入:lst.push_front() | lst.push_back() | lst.insert()
- (两端)删除:lst.pop_front() | lst.pop_back() | lst.erase() | lst.remove(element) | lst.clear()
- 存取:lst.front() | lst.back()
- 反转:lst.reverse()
- 排序: lst.sort()
1.1.5 set 2020.07.27
- 内部自动有序,不含重复元素
- 只支持迭代器访问
set <T> st;
- 访问:set<T>::iterator it = st.begin(); it != st.end(); it++; *it进行访问
- insert(x):插入x并自动排序去重
- find(val):返回val值对应的迭代器
- erase(it):删除单个元素,结合find()使用st.erase(st.find(val));删除区间
- 其他:size();clear();
1.1.6 map 2020.07.28
- map 可以将任何类型和任何类型做映射
- map以键从小到大自动排序(红黑树实现) 如:(1,1)(1,3)(2,1)
- map中键和值是唯一的,一个键对应多个值要用multimap
- 只能用string做字符串映射,不能用char[]
map <T1, T2> mp;
- 访问:下标 mp[‘a’] | 迭代器 it->first访问键 ,it->second访问值
- find(key):返回键值为key的迭代器
- erase():erase(it)删除it的迭代器 | erase(key)删除key值对应的迭代器
1.1.7 priority-queue 2020.07.29
- 队首元素优先级最高(数字大、字典序大)
- 头文件:#include<queque>
priority_queque<T> pq;
priority_queque<T, vector<int>, less<int> > pq;
- 访问:top
- 入队:push
- 出队:pop
- 第二个参数:堆的容器
- 第三个参数:对第一个参数的比较方法
- less<int>数字大,优先级大
- greater<int>数字小,优先级大
1.1.8 pair2020.07.30
- 头文件:#include<utility> 或者<map>中也包含
- 构建:pair<string, int> p(“haha”, 5) | make_pair(“haha”, 5)
- 访问:p->first & p->second
- 比较:先比较first,first相等比较second
- pair作为map的键值进行插入:mp.insert(make_pair(“haha”, 5)) 用it->first访问键,it->second访问值
1.2 算法
- 质变算法:是指运算过程中会更改区间内的元素的内容。例如拷贝,替换,删除等等
- 非质变算法:是指运算过程中不会更改区间内的元素内容,例如查找、计数、遍历、寻找极值等等
algorithm
- max() | min() | abs() :两个参数
fabs()头文件:math - swap() 交换x和y的值
- reverse(it_begin, it_end):区间内元素反转[ , )
- fill(it_begin, it_end, val):区间内元素置数[ , )
- sort(it_begin, it_end, cmp):(默认升序)排序、map和set不能用
- next_permutation() :下一个全排列中的序列
- lower_bound() | upper_bound() :对有序数组或者容器进行
1.3 迭代器(类似指针)
常用的容器中迭代器种类为双向迭代器,和随机访问迭代器