C++标准模板库(STL)常用容器

 

目录

 

前言:

vector(向量):

set(集合):

string(字符串):

map(地图)

queue(队列)

stack(栈)

pair(对)


前言:

    最近在备考CSP,别人推荐看胡凡大神的《算法笔记》,看到STL部分觉得特别有用,所以就整理了一下,把每一种容器的使用都列了出来,供需要的人参考~

    大家可以通过目录跳转到相应容器,每个部分都把重要的使用方法使用了一遍,并加了注释,大家可以根据注释理解一下。

vector(向量):

其实就相当于大小可变的数组,比较适合元素类型确定,但数目未知的情况。

#include
#include
using namespace std;
int main(){
	vector vec; // 定义一个vector
	vector arr1[5]; //含有5个vector的vector数组 (只有一个维度的大小可变)
	vector > arr2;  // vector数组 (两个维度的长度都可变)


// 为arr2赋值并输出 
	for(int i=0;i<5;i++){
		vector temp;
		for(int j=0;j<5;j++){
			temp.push_back(j);
		}
		arr2.push_back(temp);
	}
	cout<<"数组arr2的值为:"<::iterator it=vec.begin();it!=vec.end();it++){
		cout<<*it<<" ";
	}
	vector::iterator it = vec.begin();
	vec.insert(it+2,-1);	// 在下标为2的位置插入-1 
	cout<::iterator it=vec.begin();it!=vec.end();it++){
		cout<<*it<<" ";
	}
	it = vec.begin();
	vec.pop_back();
	cout<::iterator it=vec.begin();it!=vec.end();it++){
		cout<<*it<<" ";
	}
	it = vec.begin()+2;
	vec.erase(it);
	cout<::iterator it=vec.begin();it!=vec.end();it++){
		cout<<*it<<" ";
	}
	vec.clear();
	cout<

 

set(集合):

内部自动排序,并且自动删除重复元素。

/*
* set是内部自动有序且不含重复元素的容器 
* 只能通过迭代器访问 
*/

#include
#include
#include
//#include
using namespace std;
int main(){
	set st; //定义单个set 
	st.insert(12); //插入元素5,自动排序并去重
	for(int i=0;i<10;i++){
		st.insert(i);
	}
	
	set::iterator it=st.find(5); // 查找元素5,并返回其迭代器 

	for(auto i=st.begin();i!=st.end();i++){
		cout<<*i<<" ";
	}
	
	cout< mu;	// 只拍序,不去重 
	unordered_set un;  // 只去重,不排序 
	mu.insert(5);
	un.insert(20);
	for(int i=0;i<10;i++){
		mu.insert(10-i);
		un.insert(10-i);
	}
	cout<

string(字符串):

这个很常用,就不过多赘述了

#include
using namespace std;
int main(){
	string str;
	str="hello world.";	
	cout<

 

map(地图)

相当于字典类型,可以把元素关联起来

/*
*map会自动根据键值从小到大排列 
*键值是唯一的
*可通过下标和迭代器两种方式访问 

 
*/
#include
#include
#include
using namespace std;
int main(){
	map mp;
	mp['c']=3;
	mp['a']=4;
	mp['z']=5;
	map::iterator it=mp.find('c'); // 返回键为'c'的映射的迭代器 
	cout<first<<"  "<second<::iterator it2 = mp.find('z');
	mp.erase(it,it2);

	for(map::iterator it=mp.begin();it!=mp.end();it++){
		cout<first<<" "<second< mu; // 可以一对多
//	mu['a'] = 10;
//	mu['a'] = 10;
//	mu['a'] = 5;
//	mu['b'] = 2;
//	for(auto i = mu.begin();i!=mu.end();i++){
//		cout<first<<" "<second< mu;	// 只映射,不排序,同一键多次赋值会被覆盖 
	mu['a'] = 10;
	mu['a'] = 10;
	mu['a'] = 5;
	mu['b'] = 2;
	mu['z'] = 8;
	for(auto i = mu.begin();i!=mu.end();i++){
		cout<first<<" "<second<

queue(队列)

其实和vector挺像的,都可以加入不定数量的元素,但不同的是,queue只能操作队首和队尾的元素,而不能通过下标访问。另外还有优先级队列(priority_queue)

/*
*只能通过front()来访问队首元素;用back()访问队尾元素 


*/
#include
#include
using namespace std;
int main(){
	queue q;
	q.push(10);  	// push(x) x入队
	q.push(8);
	q.push(12);
	cout< pq;
	for(int i=0;i<10;i++){
		pq.push(10-i);
	}
	cout<,less > pq1;	// less表越大优先级越大,因为从队首开始越来越小,所以队首最大,greater相反 
	priority_queue,greater > pq2;
	for(int i=0;i<10;i++){
		pq1.push(10-i);
		pq2.push(10-i);
	}
	cout<<"less的优先级队列(从大到小排列):"<" 
			return f1.price < f2.price;
		}
	}; 
	priority_queue f1; // 之后就可以直接定义fruit类型的优先级队列,内部就是以价格高的水果为高优先级 
	
	// 2.利用cmp函数
	struct fruit{
		string name;
		int price;
	};
	struct cmp{
		bool operator()(fruit f1, fruit f2){
			return f1.price > f2.price;
		}
	};
	priority_queue,cmp> q;
	return 0;
}

stack(栈)

栈是一种先进后出的数据结构

#include
#include
using namespace std;
int main(){
	stack sk;
	for(int i=0;i<10;i++){
		sk.push(i);
	}
	cout<<"一共有"<

pair(对)

可以把连个数据连成一个元素,一般把它和map配合使用

#include
#include
#include
using namespace std;
int main(){
	pair p1;
	pair p2("haha",5);	// 堆pair进行初始化
	// 临时创建一个pair
	pair("haha",5);
	make_pair("haha",5);
	
	cout< mp;
	mp.insert(make_pair("hello",1));
	mp.insert(pair("world",2));
	for(auto i=mp.begin();i!=mp.end();i++){
		cout<first<<" "<second<

 

你可能感兴趣的:(C++标准模板库(STL)常用容器)