STL用法总结

#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;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值