STL
-
vector(向量):可变长数组
-
stack(堆栈):FILO(先进后出)
-
queue(队列):FIFO(先进先出)
vector
-
初始化:vector<数据类型(int char)> v(名称);
-
v 那么就是指一个空的数组v[]
-
v(n):指长度为n的空的数组
-
v(n,x):里面有n个x的数组,并且长度也为n
-
-
遍历方法
-
v.size()->返回unit(数组大小);
-
auto
-
拷贝式:for (auto i:v){cout<<i<<' ';}(不可修改)
-
引用式 :auto&T:v 可以修改
-
-
-
插入
-
push_back(y);----->v后面加一个y,并且v的大小会加一
-
emplace_back(y);
-
下标[ ]:v[i]=v.at(i)
-
v.front()=v_0 v.back()=v[v.size()-1] 要保证v.size()>0
-
&i==&v.back()
-
-
-
排序
-
sort(v.begin(),v.end()) 从小到大
-
-
返回下标
-
lower_bound(v,begin(),v.end(),x)-v.begin() 返回x的下标
-
-
去重 返回去重后第一个重复(无效)元素的迭代器
-
unique(v.begin(),v.end()); 使用unique的前提是已经排序(升序)
-
如果v=[1,2,2,3,3,5] 使用unique后 v=[1,2,3,4,无效数据,无效数据](因为有两个重复数据,所以去重后,后面有两个无效数据) unique返回2(返回第一个重复的数据)
-
-
代码:
#include<bits/stdc++.h> using namespace std; void output(vector<int> &v) { cout<<"v.size()="<<v.size()<<":";//输出大小 for(auto &i:v)//遍历输出 cout<<i<<" "; cout<<"\n"; } int main() { vector<int>v;//初始化容器 output(v); v.push_back(1);//增添元素1 output(v); v=vector<int>(5); output(v); v=vector<int>(3,2);//长度为3并且里面有3个2 output(v); for(int i=0;i<10;i++) v.push_back(10-i); output(v); //vector排序 sort(v.begin(),v.end()); output(v); cout<<lower_bound(v.begin(),v.end(),3)-v.begin()<<endl;//返回下标 unique(v.begin(),v.end());//去重 output(v); sort(v.begin(),v.end());//使用unique必须有序,但是前面使用了unique,让v变得无序了,所以需要再使用一次sort v.erase(unique(v.begin(),v.end()),v.end());//删除 output(v); return 0; }
-
运行结果:
stack(堆栈)
-
可以想象成一个下面有底的水桶,往里面放东西,取东西那么就只能从最上面一个一个取,直到最后。
-
FILO(先进后出)
-
出栈:pop
-
入栈:push
-
-
初始化 stack<数据类型(int char double)> stk; 栈最开始一定是空的
-
入栈: stk.push(x);
-
出栈: stk.pop( ); 需要保证栈非空
-
-
常用函数
-
stc.empty( )----->判断是否为空,为空返回true,不空返回false。
-
stc.size( )返回栈中元素的个数,即栈的大小,可以用来判断栈是否为空。
-
stk.top( )返回栈顶元素,不会自动pop,往往和pop( )一起用。
-
-
代码:
#include<bits/stdc++.h> using namespace std; int main() { stack<int>stk;//初始化栈 for(int i=1;i<=10;i++)//加入元素1 2 3 4 5 6 7 8 9 10 { stk.push(i); } while(stk.size())//栈非空便一直循环 { cout<<stk.top()<<" ";//输出栈顶元素 stk.pop();//删掉栈顶元素 } return 0; }
-
运行结果:
queue(队列)
-
相当一个单行管道,谁先从这头进去,谁就从另一头先出来,后面的需要排队。
-
FIFO(先进先出)
-
入队:push
-
出队:pop
-
-
初始化 queue<数据类型 int char double......>q;
-
入队:q.push(x);
-
出队:q.pop( );
-
-
常用函数
-
q.empty( );判断是否为空
-
q.size( );返回大小
-
q.front( );返回队首元素,也需要和pop一起使用
-
q.back( );返回队尾元素
-
-
代码:
#include<bits/stdc++.h> using namespace std; struct Node//定义一个结构体Node { int x,y; }; int main() { queue<Node>q;//队列中数据类型为一个结构体 for(int i=1;i<=6;i++) { q.push({i,i*2});//队列中添加元素 } while(q.size())//队列不为空则一直循环 { cout<<q.front().x<<" "<<q.front().y<<"\n";//输出首元素 cout<<q.back().x<<"\n";//输出尾元素 q.pop();//出队 } return 0; }
-
运行结果: