C++ STL 总结

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();
}

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值