STL标准模板库中vector向量容器,set容器,map容器,sort容器的常用方法。

 vector向量容器的使用,本质是一个动态数组,可以自动调节大小,根据数据的大小调节容器的大小,数据类型为向量类型。

#include <iostream>
#include <vector>

using namespace std;
struct student
{
	char name[20];
	int age;
};
int main()
{
	//定义vector存放多个整数
	vector<int> v1;
	
	//定义vector存放多个小数
	vector<double> v2;
	
	//定义vector存放多个学生结构体
	vector<struct student> v3;
	
	//定义vector存放多个字符串
	vector<string> v4;
	
	//往容器里面存放整数
	v1.push_back(18);
	v1.push_back(28);
	v1.push_back(38);
	v1.push_back(48);
	
	//遍历容器
	//方法一:传统for循环
	 for(int i=0; i<v1.size(); i++)
	{
		 cout<<"当前容器中数据是: "<<v1.at(i)<<endl;
		 cout<<"当前容器中数据是: "<<v1[i]<<endl;//两种方法是等效的
    }
	
	//方法二:新式for循环
	for(auto &x:v1)  //用引用x去自动遍历v1里面所有的数据(传引用) 
		cout<<"当前容器中数据是: "<<x<<endl;
		
	//方法三:使用迭代器去遍历
    //定义一个迭代器,迭代器对应的类型与遍历的vector元素类型一样
	
     vector<int>::iterator it;

     it=myvector.begin();  //迭代器指向容器的起始位置
	for(; it!=myvector.end(); it++)
	{
		//修改容器中的元素
		*it+=10;
	}
	//验证是否真的修改成功了
	for(auto &x:myvector)
		cout<<"修改以后,元素是: "<<x<<endl; 
/*
 第二种写法,auto自动匹配类型
auto it=myvector.begin(); //简单,让auto自动推断类型

	for(; it!=myvector.cend(); it++)
	{
		//读写迭代器,访问修改数据
		//cout<<"容器里面的数据是: "<<*it<<endl;
	
		*it+=20;
	} 
*/
 
		
}

set容器的用法,默认为自动升序,不能重复存放相同数据。

#include <iostream>
#include <set>

using namespace std;

int main()
{
	//定义set的对象   //vector<int>::iterator
	set<int> myset;   //set<int>::iterator
	
	//存放几个数据--》无序
	myset.insert(79);
	myset.insert(5);
	myset.insert(105);
	myset.insert(4);
	myset.insert(893);
	
	//清除
	//myset.clear();
	
	//统计某个元素个数
	auto ret=myset.count(105);
	cout<<"出现次数是: "<<ret<<endl;
	
	//安放数据
	myset.emplace(1);
	myset.emplace(108);
	 auto ret=myset.emplace(105);
	 if(ret.second==true)
		 cout<<"恭喜安放成功"<<endl;
	 else
		 cout<<"倒霉,没有安放成功"<<endl;
	
	//删除数据
	//auto it=myset.begin();
	//myset.erase(it);
	//myset.erase(105);
	//it++;
	//it++;  //被逼的,set的迭代器没有重载加法运算
	//myset.erase(myset.begin(),it);
	
	//查找
	auto ret=myset.find(4);
	if(ret!=myset.end())
		cout<<"我找4了"<<endl;
	else
		cout<<"我没有找4了"<<endl;
	
	//验证set可以自动升序排列
	for(auto &x:myset)
		cout<<"myset里面的数据是: "<<x<<endl;
}

map容器的使用

#include <iostream>
#include <map>

using namespace std;

int main()
{
	//定义map存放键值对
	map<string,int> mymap;  //键--》string 值--》int
	
	//存放键值对--》使用了insert方法
	mymap.insert(pair<string,int>("张三",1));
	mymap.insert(pair<string,int>("李四",2));
	mymap.insert(pair<string,int>("王五",3));
	mymap.insert(pair<string,int>("赵六",4));
	
	//存放键值对--》使用重载的[]
	mymap["赵七"]=1;  //等价于mymap.insert(pair<string,int>("张三",5));
	mymap["赵八"]=2;
	mymap["赵九"]=3;
	
	//查找
	auto ret=mymap.find("赵时");
	if(ret!=mymap.end())
	{
		cout<<"键: "<<ret->first<<endl;
		cout<<"值: "<<ret->second<<endl;
	}
	else
		cout<<"对不起,没有这个键"<<endl;
	
	//遍历map
	auto it=mymap.begin();
	for(; it!=mymap.end(); it++)
	{
		cout<<"键是: "<<it->first<<endl;
		cout<<"值是: "<<it->second<<endl;
	}
}

sort容器的使用

#include <iostream>
#include <list>

using namespace std;

//函数符--》二元谓词函数
bool fun(int &x1,int &x2)
{
	return x1>x2;  //x1表示前面的数,x2表示后面的数
}

//函数符--》类重载圆括号
class Test
{
public:
	bool operator()(int &x1,int &x2)
	{
		return x1>x2;  //x1表示前面的数,x2表示后面的数
	}
};

//函数符--》Lambda表达式
int main()
{
	//定义list对象
	list<int> mylist;
	
	//存放数据
	mylist.push_back(78);
	mylist.push_back(45);
	mylist.push_back(52);
	mylist.push_back(96);
	mylist.push_back(4);
	
	//排序
	//mylist.sort();  //默认升序
	
	//我想降序--》用函数符作为实参实现降序
	//mylist.sort(fun);  //函数符--》二元谓词函数
	//mylist.sort(Test());    //函数符--》类重载圆括号
	mylist.sort([](int &x1,int &x2){return x1>x2;});  //函数符--》Lambda表达式
	cout<<"=====================排序之后====================="<<endl;
	for(auto &x:mylist)
		cout<<"容器中数据是: "<<x<<endl;
	
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肖爱Kun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值