STL - 常用函数总结
文章目录
一、vector
常 用 函 数 : 常用函数: 常用函数:
#include<vector>
vector<Type> V;
V.size();
V.empty();
V.clear();
V.front(),V.back();
V.push_back(),V.pop_back()
V.begin(),V.end()
reverse(V.begin(),V.end()); //翻转数组
访 问 方 式 与 正 常 数 组 访 问 相 似 , 同 时 支 持 直 接 比 较 运 算 ( 按 字 典 序 ) , 如 : 访问方式与正常数组访问相似,\\同时支持直接比较运算(按字典序),如: 访问方式与正常数组访问相似,同时支持直接比较运算(按字典序),如:
vector<int> V1(4,3),V2(5,4); //V1:3 3 3 3,V2:4 4 4 4 4,所以V1<V2
要 注 意 尽 量 减 少 内 存 空 间 的 申 请 次 数 , 比 较 耗 时 。 要注意尽量减少内存空间的申请次数,比较耗时。 要注意尽量减少内存空间的申请次数,比较耗时。
二、string
常 用 函 数 : 常用函数: 常用函数:
#include<string>
string S;
S.substr(1,2); //从下标1开始,长度为2的子串
S.substr(1); //下标从1开始,直到尾部的子串
S.c_str(); //返回为C语言字符数组的首地址
S.size();
S.emtpy();
S.clear();
S.find(sub,pos); //从S的pos位置开始,查找sub子串,若存在返回第一次出现的位置,否则返回-1
reverse(S.begin(),S.end()); //翻转字符串
三、queue
常 用 函 数 : 常用函数: 常用函数:
#include<queue>
queue<Type> Q;
Q.size();
Q.emtpy();
Q.front();
Q.back();
Q.push(); //队尾插入
Q.pop(); //队头弹出
Q = queue<Type>(); //清空队列。 注意,queue没有clear函数
四、priority_queue(默认大根堆)
#include<queue>
#include<vector>
priority_queue<Type> Q; //这样定义默认小根堆
priority_queue<int,vector<int>,greater<int>> Q; //这样定义为大根堆
//或者元素取负号入堆
Q.size();
Q.emtpy();
Q.push(); //队尾插入
Q.pop(); //队头弹出
Q.top(); //堆顶元素
Q = priority_queue<Type>(); //清空队列。 priority_queue没有clear函数
五、stack
常 用 函 数 : 常用函数: 常用函数:
#include<stack>
stack<Type> S;
S.size();
S.emtpy();
S.top(); //栈顶元素
S.pop(); //弹出栈顶
S.push(); //栈顶插入
S = stack<Type>(); //清空栈。 stack没有clear函数
六、deque(双端队列)
常 用 函 数 : 常用函数: 常用函数:
#include<deque>
deque<Type> deq;
deq.size();
deq.emtpy();
deq.front()/deq.back();
deq.push_back()/deq.pop_back();
deq.push_front()/deq.pop_front();
deq.clear();
deq.begin();deq.end();
deq[];
缺 点 : 速 度 慢 缺点:速度慢 缺点:速度慢
七、set、map、muiltiset、multimap
基 于 平 衡 二 叉 树 ( 红 黑 树 ) , 动 态 维 护 有 序 序 列 。 基 本 上 所 有 操 作 都 是 O ( l o g n ) 的 , 除 了 s i z e , e m p t y , c l e a r 函 数 常 用 函 数 : 基于平衡二叉树(红黑树),动态维护有序序列。\\基本上所有操作都是O(logn)的,除了size,empty,clear函数\\常用函数: 基于平衡二叉树(红黑树),动态维护有序序列。基本上所有操作都是O(logn)的,除了size,empty,clear函数常用函数:
#include<set>
#include<map>
set<Type> s; //不能有重复元素
multiset<Type> ms; //可以有重复元素
map<Type> mp; //不能有重复元素
multimap<Type> mmp; //可以有重复元素
size();
emtpy();
clear();
begin()/end(); //--,++ 前驱与后继,O(logn)
//set/multiset
insert(); //插入一个元素,O(logn)
find(); //查找一个元素。不存在就返回end();
count(); //返回某个元素的个数
erase();
// erase(x) 删除所有等于x的元素
// erase(iterater) 删除这个迭代器
lower_bound()/upper_bound();
//map/multimap
insert(); //插入的是一个pair
erase(); //删除的是pair或一个迭代器
find(); //查找一个元素。不存在就返回end();
mp[]/mmp[]; //当作数组使用,时间复杂度是O(logn)的
lower_bound()/upper_bound();
八、unordered_map/unordered_set/unordered_multimap/unordered_multiset
所 有 操 作 与 七 类 似 , 且 增 删 改 查 的 时 间 复 杂 度 是 O ( 1 ) 的 , 但 是 不 支 持 l o w e r _ b o u n d 和 u p p e r _ b o u n d 即 − − , + + 。 即 与 排 序 有 关 的 所 有 操 作 是 不 支 持 的 。 所有操作与七类似,且增删改查的时间复杂度是O(1)的,但是不支持lower\_bound和upper\_bound即--,++。\\即与排序有关的所有操作是不支持的。 所有操作与七类似,且增删改查的时间复杂度是O(1)的,但是不支持lower_bound和upper_bound即−−,++。即与排序有关的所有操作是不支持的。