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;
}