$\color{blue}{\texttt{C++}}$$\color{orange}{数据结构}\color{}{基础篇目录}$
好久不更,先把第七章更了hh
进入正题!
$$第七章 \ \ \ \ STL$$
再次之前提一句,C++的STL比较多,我尽量整理全,如有不全,请在评论区指出
如果对你有帮助,建议点赞+收藏
本章目录
$1.vector$
$2.stack$
$3.queue$
$\ \ \ \ \ \ priority\ queue$
$\ \ \ \ \ \ deque$
$4.map/unordered\ map$
$5.set/unoredered\ set/multiset$
$6.list$
vector
vector是个好东西,基本可以替代C++的数组使用
初始化
vector<T> V;
一般操作
V.emtpy(); //判断V是否为空,若为空返回true,否则返回false
V.size(); //返回V中元素的个数
V.push_back(x); //在V尾部加入x
V.pop_back(x); //删除最后一个元素
V.clear(); //清空V
V.front(); //返回V的第一个元素
V.back(); //返回V的最后一个元素
至于访问嘛,直接V[x]就行了
stack(栈)
栈也可以手动实现,具体看这里
这里我们主要讲STL
初始化
stack<T> S;
一般操作
S.push(x); //在S的尾部加入x
S.pop(); //删除栈顶元素
S.top(); //返回栈顶元素
S.empty(); //判断S是否为空,若为空返回true,否则返回false
S.size(); //返回S中元素的个数
queue(队列)
初始化
queue<T> Q;
一般操作
Q.push(x); //在Q的尾部加入x
Q.pop(); //删除第一个元素
Q.front(); //返回第一个元素
Q.back(); //返回最后一个元素
Q.empty(); //判断Q是否为空,若为空返回true,否则返回false
Q.size(); //返回Q中元素的个数
priority_queue(优先队列)
优先队列是一种队列的变形,它其实就相当于一个大根堆,会自动对数据进行排序
初始化
priority_queue<int> Q; //大根堆
priority_queue<int,vector<int>,greater<int> > Q; //小顶堆
一般操作
Q.push(x); //在Q的尾部加入x
Q.pop(); //删除第一个元素
Q.top(); //返回第一个元素
Q.empty(); //判断Q是否为空,若为空返回true,否则返回false
Q.size(); //返回Q中元素的个数
deque(双端队列)
双端队列,顾名思义,就是可以在两端进行操作的队列,也是队列的一种变形(话说队列的变形可真多)
初始化
deque<T> Q;
一般操作
Q.front(); //返回第一个元素
Q.back(); //返回最后一个元素
Q.empty(); //判断Q是否为空,若为空返回true,否则返回false
Q.size(); //返回Q中元素的个数
Q.clear(); //清空Q
Q.push_back(x); //在Q尾部加入x
Q.push_front(x); //在Q头部加入x
Q.pop_back(); //删除最后一个元素
Q.pop_front(); //删除第一个元素
map/unordered_map
map/unordered_map 可以在任意类型间做映射
unordered_map 就相当于C++中的哈希表,用法基本同map
map会帮你自动排好序,unordered_map不会
初始化
map<T1,T2> M;
unoredered_map<T1,T2> M;
一般操作
/*插入*/ M[x]=y; /*x,y分别对应上面的T1,T2*/
/*查询*/ M[x] /*会返回y*/
/*返回x的出现次数*/ M.count(x) /*判断x是否存在即为 M.count(x)!=0 */
/*返回x的迭代器*/ M.find(x) /*判断x是否存在也可以为 M.find(x)!=M.end() */
/*删除键为key的元素*/ M.erase(key)
/*返回第一个元素*/ M.begin()
/*返回最后一个元素*/ M.end()
set/unoredered_set/multiset(集合)
set能帮你自动去重并排序
multiset则不会去重
unordered_set则不会排序
初始化
set<T> S;
unordered_set<T> S;
multiset<T> S;
一般操作
S.insert(x); //插入x
S.find(x); //返回x的迭代器
S.erase(key); //删除迭代器为key的元素
S.size(); //返回S中元素的个数
S.clear(); //清空S
S.begin(); //返回第一个元素
S.end(); //返回最后一个元素
list(链表)
list就相当于一个链表,能够快速插入删除,但访问较慢
初始化
list<int> L;
一般操作
L.front(); //返回第一个元素
L.back(); //返回最后一个元素
L.empty(); //判断L是否为空,若为空返回true,否则返回false
L.size(); //返回L中元素的个数
L.clear(); //清空L
L.push_back(x); //在L尾部加入x
L.push_frontx); //在L头部加入x
L.pop_back(); //删除最后一个元素
L.pop_front(); //删除第一个元素