文章目录
#include< vector >
基本操作
#include<bits/stdc++.h>
using namespace std;
//初始化
vector<int> a;
signed main(){
int n=10;
//赋值
for(int i=0;i<n;i++) a.push_back(i);
//pop_back将a最后一个元素删除
a.pop_back();
/*
常见错误赋值
for(int i=0;i<n;i++) a[i]=i;
*/
//读取
for(int i=0;i<n;i++) cout<<a[i]<<" ";
//长度
cout<<endl<<a.size();
//判空
if(!a.empty()) cout<<endl<<"不空!";
//front/back
cout<<endl<<"front= "<<a.front();
cout<<endl<<"back= "<<a.back();
//清空
a.clear();
cout<<endl<<a.size();
return 0;
}
应用
//vector二维数组运用
//邻接表存图
const int N=100;
vector<int> v[N],edge[N];
//保存x到y权值为z的有向边
void add(int x,int y,int z){
v[x].push_back(y);
edge[x].push_back(z);
}
//遍历
for(int i=0;i<v[x].size();i++){
int y=v[x][i],z=edge[x][i];
//有向边(x,y,z)
}
#include< queue >
循环队列queue
//push/pop
//push入队尾,pop入队头
for(int i=0;i<10;i++) q.push(i);
q.pop();
//front/back
int x=q.front();
int y=q.back();
cout<<"front= "<<x<<endl<<"back= "<<y<<endl;
优先队列priority_queue
- top 访问队头元素
- empty 队列是否为空
- size 返回队列内元素个数
- push 插入元素到队尾 (并排序)
- emplace原地构造一个元素并插入队列
- pop 弹出队头元素
- swap 交换内容
定义
//升序序列
priority_queue<int,vector<int>,greater<int> > qg;
//降序序列
priority_queue<int,vector<int>,less<int> > ql;
#include< deque >
基本操作
#include<iostream>
#include<stdio.h>
#include<deque>
using namespace std;
int main(void)
{
int i;
int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
deque<int> q;
for (i = 0; i <= 9; i++)
{
if (i % 2 == 0)
q.push_front(a[i]);
else
q.push_back(a[i]);
} /*此时队列里的内容是: {8,6,4,2,0,1,3,5,7,9}*/
q.pop_front();
printf("%d\n", q.front()); /*清除第一个元素后输出第一个(6)*/
q.pop_back();
printf("%d\n", q.back()); /*清除最后一个元素后输出最后一个(7)*/
deque<int>::iterator it;
for (it = q.begin(); it != q.end(); it++) {
cout << *it << '\t';
}
cout << endl;
system("pause");
return 0;
}
#include< set >
有序集合set
#include<bits/stdc++.h>
using namespace std;
int main(){
set<int> s;
s.insert(7),s.insert(3),s.insert(4);
set<int>::iterator it;
for(it=s.begin();it!=s.end();it++){
cout<<*it<<endl;
}
cout<<"size="<<s.size()<<endl;
cout<<"empty="<<s.empty()<<endl;
cout<<"find(x)="<<*s.find(2)<<endl;
cout<<"lower_bound="<<*s.lower_bound(5)<<endl;
cout<<"upper_bound="<<*s.upper_bound(8)<<endl;
return 0;
}
有序多重集合multiset
#include<bits/stdc++.h>
using namespace std;
#define int long long
multiset<int> s;
multiset<int>::iterator ans;
signed main(){
for(int i=10;i;i--){
s.insert(i);
}
for(ans=s.begin();ans!=s.end();ans++)
cout<<*ans<<" ";
cout<<endl;
cout<<"lower_bound="<<*s.lower_bound(5)<<endl;
cout<<"upper_bound="<<*s.upper_bound(8)<<endl;
return 0;
}