vector 可变长数组
#include <vector>
一维初始化 vector<int> a; vector<double> b; vector<node> c;
指定长度初始化 相当于正常数组 vector<int> v(n);
二维初始化 vector<int> v[5]; //行固定为5,列不变
行列均可变 vector<vector<int>> v;
c.front();//返回第一个数据 c.back(); c.pop_back();//删掉最后一个数据 c.push_back();//尾部加入一个数据 c.size(); c.resize(n,v); c.insert(it,x); c.begin();c.end();//返回首元素和最后一个元素后一个位置的迭代器(通俗说是地址)
注意:end()返回最后一个元素的后一个位置的地址,所有stl容器均是如此
使用sort排序: sort(c.begin(),c.end());
sort为STL函数 见后续
访问方法:下标法(和数组一样)
迭代器法 vector<int> : :itreator it = c.begin(); *(it+i)
使用auto
输入: vector<int> a(n); for(auto &x: a){ cin>>x;} 输出: vector<int> v; v.push_back(12); v.push_back(24); for(auto val: v){ cout<<val<<" ";}
stack 先进后出,后进先出的容器
#include<stack> stack<int> s; stack<string> s; stack<node> s; 方法函数: s.push(a); s.pop();//移除 s.top();//取出 s.empty(); s.size(); 栈遍历: stack<int> st; for(int i=0;i<10;++i) st.push(i); while(!st.empty()){ int tp = st.top(); st.pop; } 数组模拟栈(比stl速度快) int tt=-1;//tt表示栈顶指针,初始无元素,初始化为-1 int st[N]; for()st[++tt]=i; int tp = st[tt--];
queue 先进先出的数据结构
#include<queue> queue<int> q; 方法函数: q.front(); q.back(); q.push(ele); q.pop();//delete q.size(); q.empty(); 队列模拟: int q[N]; int hh=0,tt=-1; 入队: q[++tt]=1; q[++tt]=2; 出队: while(hh<=tt){ int t =q[hh++];//先进先出 }
deque 双端队列 首尾都可以插入或删除
#include<deque>
deque<int> dq;
dq.push_back();dq.push_front;
dq.front();dq.back();
dq.pop_back();dq.pop_front();
empty();size();clear();
priority queue 优先队列是在正常队列的基础上加了优先级,保证每次队首元素都是优先级最大的,可以实现每次从优先队列中取出的一个元素都是优先级最大的一个。底层通过堆来实现!
#include<queue> priority_queue<int> q; 方法函数: q.top();//优先队列只能通过top访问队首元素 q.pop(); q.push(); q.size();q.empty(); 没有clear方法 priority_queue<int> pq;//默认大根堆 <int,vector<int>,less<int>> priority_queue<int,vector<int>,greater<int>> q;//小根堆 priority_queue<double,vector<double>,greater<double>> q; //vector<>表示用来承载底层数据结构堆的容器 greater 数字小的优先级大 less数字大的优先级大 高级数据类型(结构体)优先级 (优先队列中存储的是结构体,要定义结构体的比较运算) struct Point{ int x,y; }; 推荐方法: struct node{ int x,y; bool operator < (const Point &a)const{ return x<a.x;}//孩子结点小于父节点 大根堆 } priority_queue<Point> q; 特殊类型的优先级(存储pair类型) priority_queue<pair<int,int>> q; q.push({7,8}); q.push({7,9}); q.push(make_pair(8,7)); while(!q.empty()) { cout<<q.top().first<<q.top().second<<"\n"; q.pop(); }