C++STL基础整理

STL

by lqx

vector

#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	
	vector<int>v1;
	for(int i=0;i<=5;i++)v1.push_back(i); //012345
	v1.pop_back(); //01234
	reverse(v1.begin(),v1.end()); //43210
	v1.erase(v1.begin()+2); //将v1[2]删除
	for(auto i:v1)cout<<i;cout<<'\n'; //4310
	
	vector<int>v2(10); //初始化10个0
	v2.insert(v2.begin()+2,-1); //将-1插入v2[2]的位置
	cout<<"v2.size():"<<v2.size()<<'\n'; //11
	for(auto i:v2)cout<<i;cout<<'\n'; //00-100000000
	
	vector<int>v3(7,4); //初始化7个4
	v3.erase(v3.begin()+1,v3.begin()+3); //删除[first,last)元素
	for(auto i:v3)cout<<i;cout<<'\n'; //44444
	
	vector<int>v4{4,2,3,1,4,5,6}; //{}直接赋值
	vector<int>v5(v4.begin(),v4.end()); //复制v4的元素
	for(auto i:v5)cout<<i;cout<<'\n'; //4231456

	//vector离散化模板:v.erase(unique(v.begin(),v.end()),v.end())
	sort(v4.begin(),v4.end());
	for(auto i:v4)cout<<i;cout<<'\n'; //1234456
	v4.erase(unique(v4.begin(),v4.end()),v4.end());
	for(auto i:v4)cout<<i;cout<<'\n'; //123456
	
	vector<int>v[10]; //二维数组 v[0]~v[9]都是一个vector
	//vector<vector<int> >v(10);等价
	for(int i=1;i<5;i++)v[0].push_back(i);
	for(int i=1;i<9;i++)v[1].push_back(i);
	cout<<v[0].size()<<' '<<v[1].size()<<'\n'; //4 8
	for(auto i:v[0])cout<<i;cout<<'\n'; //1234
	for(auto i:v[1])cout<<i;cout<<'\n'; //12345678
	return 0;
}

map

#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	map<int,string> mp1;
	map<string,int> mp2;
	mp1[1]="lqx";mp2["lqx"]=1;
	mp1[2]="lts";mp2["lts"]=2;
	mp1[3]="lzl";mp2["lzl"]=3;
	mp1[4]="djy";mp2["djy"]=4;
	cout<<mp1.size()<<' '<<mp2.size()<<'\n'; //4 4
	for(int i=1;i<=4;i++)cout<<mp1[i]<<'\n';
	string s;cin>>s;
	cout<<mp2[s];
	return 0;
}

unordered_map

  • unordered_map底层是用哈希表实现的,map底层是用红黑树实现的

  • unordered_map是不按键值排序的,插入的时间是O(logn),查询时间是O(1)

  • map是按键值排序的,插入的时间是O(logn),查询时间是O(logn)

  • unordered_map和map的使用几乎是一致的

#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	unordered_map<int,string> mp1;
	unordered_map<string,int> mp2;
	mp1[1]="lqx";mp2["lqx"]=1;
	mp1[2]="lts";mp2["lts"]=2;
	mp1[3]="lzl";mp2["lzl"]=3;
	mp1[4]="djy";mp2["djy"]=4;
	cout<<mp1.size()<<' '<<mp2.size()<<'\n'; //4 4
	for(int i=1;i<=4;i++)cout<<mp1[i]<<'\n';
	string s;cin>>s;
	cout<<mp2[s];
	return 0;
}

stack

#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
	stack<int> s,t;
	for(int i=1;i<=4;i++)s.push(i);
	s.pop();
	t.push(s.top());
	cout<<s.size()<<'\n'; //3
	while(!s.empty()){
		cout<<s.top()<<' ';
		s.pop();
	} //3 2 1
	cout<<'\n';
	while(!t.empty()){
		cout<<t.top()<<' ';
		t.pop();
	} //3
	return 0;
}

queue

#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
	queue<int> s,t;
	for(int i=1;i<=4;i++)s.push(i),t.push(s.back());
	cout<<s.size()<<'\n'; //4
	cout<<s.front()<<' '<<s.back()<<'\n';//1 4
	while(!s.empty()){
		cout<<s.front()<<' ';
		s.pop();
	} //1 2 3 4
	cout<<'\n';
	while(!t.empty()){
		cout<<t.front()<<' ';
		t.pop();
	} //1 2 3 4
	return 0;
}

deque

#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
	deque<int> s,t;
	for(int i=1;i<=4;i++)s.push_back(i),t.push_back(s.back());
	s.push_front(0);
	s.push_back(5);
	cout<<s.size()<<'\n'; //6
	while(!s.empty()){
		cout<<s.front()<<' ';
		s.pop_front();
	} //0 1 2 3 4 5
	cout<<'\n';
	t.pop_front();
	t.pop_back();
	cout<<t.size()<<'\n'; //2
	while(!t.empty()){
		cout<<t.front()<<' ';
		t.pop_front();
	} //2 3
	return 0;
}

priority_queue

priority_queue默认大根堆,队首元素最大值

#include <bits/stdc++.h>
using namespace std;
int main(){
	priority_queue<int> q1;//默认大顶堆
  //priority_queue<int,vector<int>,less<int>> q1; 等价
	priority_queue<int,vector<int>,greater<int>> q2;//小根堆
	for(int i=1;i<=5;i++)q1.push(i);
	for(int i=1;i<=5;i++)q2.push(i);
	while(!q1.empty()){
	 	cout<<q1.top();
	 	q1.pop();
	} //54321
	cout<<'\n';
	while(!q2.empty()){
		cout<<q2.top();
		q2.pop();
	} //12345
	cout<<'\n';
	for(int i=1;i<=5;i++)q1.push(i);
	for(int i=1;i<=5;i++)q2.push(i);
	q1.pop();
	q2.pop();
	while(!q1.empty()){
	 	cout<<q1.top();
	 	q1.pop();
	} //4321
	cout<<'\n';
	while(!q2.empty()){
		cout<<q2.top();
		q2.pop();
	} //2345
	return 0;
}

set

#include <bits/stdc++.h>
using namespace std;
int main(){
	set<int> s;//自动排序去重
	for(int i=5;i>0;i--)s.insert(i);
	s.insert(9);
	s.insert(3);
	s.erase(2);
	cout<<s.size()<<'\n';
	for(auto i:s)cout<<i; //13459
	cout<<'\n';
	//查找元素 s.find(x)==s.end()?"N":"Y"
	if(s.find(5)!=s.end())cout<<"5在集合里\n";
	else cout<<"5不在集合里\n";
	if(s.find(99)!=s.end())cout<<"99在集合里\n";
	else cout<<"99不在集合里\n";
	return 0;
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值