vector
vector<int> vec;//定义一个vector,<>中的int可以换成任何数据类型
vec.clear();//清空vector
vec.empty();//判断vector是否为空,如果是空就返回1,否则返回0
//vector的输入
for(int i=1;i<=5;i++)
{
int x;
cin>>x;
vec.push_back(x);//放入前一个数字的后面
}
//vec.insert()在vector中不常用,想了解自行百度
sort(vec.begin(),vec.end()); //vector排序方法
reverse(vec.begin(),vec.end()); //将vector翻转
//vecto的三种循环方法
//第一种,利用数组的循环方式
for(int i=0;i<vec.size();i++)
cout<<vec[i]<<' ';
cout<<"\n";
//第二种,利用迭代器(指针)来遍历vector
std::vector<int>::iterator it;//std::vector<int>::iterator可以换成auto
//auto定义的变量会自动识别所赋值的变量类型
for(it=vec.begin();it!=vec.end();it++)
{
cout<<*it<<" ";
}
cout<<"\n";
//第三种,利用auto进行遍历
for(auto j: vec)
{
cout<<j<<" ";
}
cout<<'\n';
//vector删除元素
vec.pop_back();//删除vector中最后一个元素
auto it1=vec.begin();
for(;it1!=vec.end();)
{
if(*it1==4) it1=vec.erase(it1);
else it1++;
}
for(auto j: vec)
{
cout<<j<<" ";
}
string
string a,b;
a.clear();b.clear();//清空
cin>>a>>b;
a.push_back('a');//尾部存放字符元素
a.pop_back();//删除最后一个字符元素
a+=b;//b字符串拼接到a字符串的后面,但没有a-=b的语法
//字符串的遍历
for(int i=0;i<a.size();i++)
{
cout<<a[i];//输出字符
a[i]='a';//修改字符
}
int t=a.find('a');
//find返回第一个出现‘a’的下标
//如果没有‘a',nm返回的是string::npos
//也可以在a中查找子串
//substr提取子串函数
string c;
c=a.substr(0,3);//取a中第0位开始往后数3位的字符子串赋值给c
cout<<c<<"\n";
c=a.substr(3);//取从3开始直到最后的字符串,将其赋值给c
pair
pair<int,int> pii;//一种数据类型,pii一个变量携带两个值,经常和vector,set,map,queue等等结合使用
cin>>pii.first>>pii.second;
cout<<pii.first<<" "<<pii.second;
set
set<int> se;
se.clear();//清空set
se.empty();//判断set是否为空
int n;
cin>>n;
int x=se.count(n);//返回set中出现n的个数
//set的输入
for(int i=1;i<=5;i++)
{
int x;
cin>>x;
se.insert(x);
}
//set的遍历
//利用迭代器遍历
std::set<int>::iterator it;
for(it=se.begin();it!=se.end();it++)
{
cout<<*it<<" ";
}
cout<<"\n";
//利用auto遍历
for(auto j:se)
{
cout<<j<<" ";
}
cout<<"\n";
//set的删除
auto first1=se.begin();
se.erase(it);//删除set首地址的元素
se.erase(n);//删除set中元素n
auto first=se.begin(),second=se.begin();
second++;second++;
se.erase(first,second);//删除地址first与second之间的元素,左闭右开
se.find(n);//在set中查找元素n,返回一个地址,如果set中没有元素n,就返回se.end()的地址
se.size();//set中的元素个数
multiset<int> mse;//可以存放重复元素的set
map
map<int,int> mp;//第一个int是关键字,第二个是关键值,关键字不重复
for(int i=1;i<=5;i++)
{
int x,y;
cin>>x>>y;
mp.insert({x,y});//或者mp[x]=y也可以
}
mp.clear();//清空map
mp.empty();//同set
std::map<int,int>::iterator it;//map遍历
for(it=mp.begin();it!=mp.end();it++)
{
cout<<(*it).first<<" "<<(*it).second<<"\n";
}
cout<<'\n';
for(auto j:mp)//map遍历
{
cout<<j.first<<" "<<j.second<<"\n";
}
mp.erase(3);//用法类似set
mp.count(3);//map中3的个数
auto it=mp.find(3);//查找map是否存在元素3,如果没有元素3,那么返回mp.end();
cout<<(*it).first<<" "<<(*it).second<<"\n";
multimap<int,int> ma;//可以存放重复关键字的map
queue
queue<int> q;//队列,先进先出
for(int i=1;i<=5;i++)
{
int x;
cin>>x;
q.push(x);//队列输入
}
while(q.size())//size返回queue中的元素个数
{
int x=q.front();//返回queue中队首元素
cout<<x<<" ";
q.pop();//删除queue中队首元素
}
deque<int> dq;//双端队列
for(int i=1;i<=5;i++)
{
int x,y;
cin>>x>>y;
dq.push_back(x);//放尾部
dq.push_front(y);//放首部
}
while(dq.size())//队列元素
{
int x=dq.front(),y=dq.back();//返回首部和尾部的值
dq.pop_front();//删除首部
dq.pop_back();//删除尾部
cout<<x<<' '<<y<<"\n";
}
priority_queue<int,vector<int>,greater<int>> minq;//小根堆
priority_queue<int,vector<int>,less<int>> maxq;//大根堆
for(int i=1;i<=5;i++)
{
int x;
cin>>x;
minq.push(x);
maxq.push(x);
}
while(minq.size())
{
int t=minq.top();//每次取出的值都是minq中最小的
minq.pop();
cout<<t<<" ";
}
cout<<'\n';
while(maxq.size())
{
int t=maxq.top();//每次取出来的值都是maxq中最大的
maxq.pop();
cout<<t<<" ";
}
stack
stack<int> st;//栈,先进后出
for(int i=1;i<=5;i++)
{
int x;
cin>>x;
st.push(x);//栈的储存
}
while(st.size())
{
int x=st.top();//获得尾部元素
st.pop();//删除尾部元素
cout<<x<<" ";
}
unique(去重函数)
//unique去重函数
//一般用于已经排好序的数组或者容器
//单使用unique是讲后面不重复的元素移到i前面来
//vector
vector <int> vec;
for(int i=1;i<=10;i++)
{
int x;
cin>>x;
vec.push_back(x);
}
sort(vec.begin(),vec.end());//vector排序
unique(vec.begin(),vec.end());
//返回值是从前往后第一个重复的元素的地址
for(auto j:vec)
{
cout<<j<<' ';
}
cout<<'\n';
vec.erase(unique(vec.begin(),vec.end()),vec.end());
//erase加unique是将vector中的重复元素删除
for(auto j:vec)
{
cout<<j<<" ";
}
cout<<'\n';
//数组
int a[1000];
for(int i=1;i<=10;i++)
cin>>a[i];
sort(a+1,a+11);//数组排序
unique(a+1,a+11);//将数组后面不重复的元素移到前面,后面的元素不发生改变
for(int i=1;i<=10;i++)
{
cout<<a[i]<<" ";
}
cout<<"\n";
int n=unique(a+1,a+11)-a+1;
//n之后的元素可能会发生变动,但不影响去重本身的真确性
for(int i=1;i<n;i++)
{
cout<<a[i]<<" ";
}