1.向量
#include<vector>
#include<algorithm>//reverse反向排列算法需要此头文件
using namespace std;
int main()
{
vector<int>v(3);//创建vector对象
v[0]=0;
v[1]=1;
v[2]=2;
//vector<int >v(3,1);//每个元素都赋值为1
v.insert(v.begin(),3);//在第一个元素之前插入 :3 0 1 2
v.insert(v.begin()+2,5);//在第三个元素之前插入:3 0 5 1 2
v.insert(v.end(),7);//在最末尾追加新元素:3 0 5 1 2 7
vector<int>::iterator it;//定义迭代器访问vector元素
for(it=v.begin();it!=v.end();it++)
cout<<*it<<" ";
cout<<endl;
reverse(v.begin(),v.end());//反向排列向量从首到尾的元素
for(it=v.begin();it!=v.end();it++)
cout<<*it<<" ";
cout<<endl;
v.erase(v.begin()+2);//删除第二个元素(从0开始)3 0 1 2 7
for(it=v.begin();it!=v.end();it++)
cout<<*it<<" ";
cout<<endl;
v.erase(v.begin()+1,v.begin()+3);//删除迭代器第一到第三区间的元素 3 2 7
for(it=v.begin();it!=v.end();it++)
cout<<*it<<" ";
cout<<endl;
v.clear();//清空向量
cout<<v.size()<<endl;//输出向量大小
return 0;
}
2.string基本字符系列容器
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
int main()
{
string s;
s="hello world!";//赋值
cout<<s<<endl;
char ss[20];
scanf("%s",ss);
s=ss;//把字符指针赋给字符串对象(常用方法)
cout<<s<<endl;
s=s+'a';//在字符串尾部添加一个字符
s=s+"123";//同s.append("abc");在字符串尾部追加字符串
cout<<s<<endl;
string::iterator it;//定义迭代器
it=s.begin();
s.insert(it+1,'p');//把字符‘p’插入到第一个字符前(位置从0开始)
cout<<s<<endl;
it=s.begin();
s.erase(it+3);//删除第三个元素
cout<<s<<endl;
s.erase(it,it+2);//删除0-2区间的所有元素(第二个元素保留)
cout<<s<<endl;
s.replace(2,3,"good");//从第二个字符开始,将连续的三个字符替换为“good”
cout<<s<<endl;
int mark=s.find('a');//查找第一个字符‘a’,返回下标
int flage=s.compare("I love you");//s比“I love you”大,返回1,比它小,返回-1,相等返回0
reverse(s.begin(),s.end());//反向排序string对象迭代器所指向的一段区间的元素
cout<<s<<endl;
vector<string>v;//string对象作为vector元素
v.push_back("Jack");
cout<<v[0]<<endl;//输出“Jack”
cout<<v[0][0]<<endl;//输出‘J’
cout<<v[0].length()<<endl;//输出4
return 0;
}
3.set集合容器
#include<stdio.h>
#include<algorithm>
#include<set>
using namespace std;
int main()
{
set<int>s;
s.insert(8);
s.insert(1);
s.insert(12);
s.insert(6);
s.insert(8);//第二次插入8,元素重复,不会插入
set<int>::iterator it;//定义前向迭代器
for(it=s.begin();it!=s.end();it++)//中序遍历集合中的元素
cout<<*it<<" ";
cout<<endl;
set<int>::reverse_iterator rit;//定义反向迭代器,反向遍历集合中的元素
for(rit=s.rbegin();rit!=s.rend();rit++)
cout<<*rit<<" ";
cout<<endl;
s.erase(6);//删除值为6的元素
it=s.find(8);//查找值为8的元素
if(it!=s.end())//找到
cout<<*it<<endl;
else//没找到
cout<<"not find it"<<endl;
s.clear();//清空集合
cout<<s.size()<<endl;//输出集合大小,为0
return 0;
}
4.multiset多重集合容器
multiset与set一样,唯一不同的是multiset允许重复的元素插入,而set不允许
#include<algorithm>
#include<set>
using namespace std;
int main()
{
multiset<string>s;//定义元素类型为string的多重集合对象s
s.insert("abc");
s.insert("123");
s.insert("111");
s.insert("aaa");
s.insert("123");
multiset<string>::iterator it;
for(it=s.begin();it!=s.end();it++)
cout<<*it<<" ";
cout<<endl;
int n=s.erase("123");//删除值为“123”的所有重复元素,返回删除元素总数n
cout<<n<<endl;
for(it=s.begin();it!=s.end();it++)//输出删除后剩余的元素
cout<<*it<<" ";
cout<<endl;
it=s.find("123");
if(it!=s.end())//找到
cout<<*it<<endl;
else//没有找到
cout<<"not find it"<<endl;
return 0;
}
5.map映照容器
#include<map>
#include<string>
using namespace std;
struct mycomp//自定义函数,按键值由大到小顺序将元素插入到map中
{
bool operator()(const int &a,const int &b)
{
if(a!=b)return a>b;
else return a>b;
}
};
int main()
{
map<string,double> m;//定义map对象
//插入元素,按照键值的由小到大放入红黑树中
m["Jack"] = 98.5;
m["Bomi"] = 96.0;
m["Kate"] = 97.5;
map<string,double>::iterator it;//前向遍历元素
for(it=m.begin();it!=m.end();it++)
cout<<(*it).first<<" : "<<(*it).second<<endl;//输出键值与映照数据
map<int,char,mycomp>mm;
mm[25] = 'm';
mm[28] = 'k';
mm[10] = 'x';
mm[30] = 'a';
mm[32] = 'b';
mm.erase(28);//删除键值为28的元素
map<int,char,mycomp>::reverse_iterator rit;//反向遍历元素
for(rit=mm.rbegin();rit!=mm.rend();rit++)
cout<<(*rit).first<<" : "<<(*rit).second<<endl;
map<int,char,mycomp>::iterator rrit;
rrit=mm.find(28);
if(rrit!=mm.end())//搜索到该元素
cout<<(*rrit).first<<" : "<<(*rrit).second<<endl;
else cout<<"not find it"<<endl;//未找到
for(rrit=mm.begin();rrit!=mm.end();rrit++)
cout<<(*rrit).first<<" : "<<(*rrit).second<<endl;
//数字映照字符的map写法
string s="The number is ";
cout<<s+mm[30]<<endl;
return 0;
}
#include<map>
#include<string>
using namespace std;
int main()
{
multimap<string,double>m;
m.insert(pair<string,double>("Jack",300.5));//插入元素
m.insert(pair<string,double>("Kity",200));
m.insert(pair<string,double>("Memi",500));
m.insert(pair<string,double>("Jack",306));//重复键值“Jack”插入
multimap<string,double>::iterator it;//定义前向迭代器中序遍历multimap
for(it=m.begin();it!=m.end();it++)
cout<<(*it).first<<" : "<<(*it).second<<endl;
m.erase("Jack");//删除键值为“Jack”的元素
it=m.find("Memi");//查找键值
return 0;
}
vector向量容器不但能想数组一样随机访问元素,还能在尾部插入元素,简单,高效,完全可以代替数组
#include<vector>
#include<algorithm>//reverse反向排列算法需要此头文件
using namespace std;
int main()
{
vector<int>v(3);//创建vector对象
v[0]=0;
v[1]=1;
v[2]=2;
//vector<int >v(3,1);//每个元素都赋值为1
v.insert(v.begin(),3);//在第一个元素之前插入 :3 0 1 2
v.insert(v.begin()+2,5);//在第三个元素之前插入:3 0 5 1 2
v.insert(v.end(),7);//在最末尾追加新元素:3 0 5 1 2 7
vector<int>::iterator it;//定义迭代器访问vector元素
for(it=v.begin();it!=v.end();it++)
cout<<*it<<" ";
cout<<endl;
reverse(v.begin(),v.end());//反向排列向量从首到尾的元素
for(it=v.begin();it!=v.end();it++)
cout<<*it<<" ";
cout<<endl;
v.erase(v.begin()+2);//删除第二个元素(从0开始)3 0 1 2 7
for(it=v.begin();it!=v.end();it++)
cout<<*it<<" ";
cout<<endl;
v.erase(v.begin()+1,v.begin()+3);//删除迭代器第一到第三区间的元素 3 2 7
for(it=v.begin();it!=v.end();it++)
cout<<*it<<" ";
cout<<endl;
v.clear();//清空向量
cout<<v.size()<<endl;//输出向量大小
return 0;
}
2.string基本字符系列容器
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
int main()
{
string s;
s="hello world!";//赋值
cout<<s<<endl;
char ss[20];
scanf("%s",ss);
s=ss;//把字符指针赋给字符串对象(常用方法)
cout<<s<<endl;
s=s+'a';//在字符串尾部添加一个字符
s=s+"123";//同s.append("abc");在字符串尾部追加字符串
cout<<s<<endl;
string::iterator it;//定义迭代器
it=s.begin();
s.insert(it+1,'p');//把字符‘p’插入到第一个字符前(位置从0开始)
cout<<s<<endl;
it=s.begin();
s.erase(it+3);//删除第三个元素
cout<<s<<endl;
s.erase(it,it+2);//删除0-2区间的所有元素(第二个元素保留)
cout<<s<<endl;
s.replace(2,3,"good");//从第二个字符开始,将连续的三个字符替换为“good”
cout<<s<<endl;
int mark=s.find('a');//查找第一个字符‘a’,返回下标
int flage=s.compare("I love you");//s比“I love you”大,返回1,比它小,返回-1,相等返回0
reverse(s.begin(),s.end());//反向排序string对象迭代器所指向的一段区间的元素
cout<<s<<endl;
vector<string>v;//string对象作为vector元素
v.push_back("Jack");
cout<<v[0]<<endl;//输出“Jack”
cout<<v[0][0]<<endl;//输出‘J’
cout<<v[0].length()<<endl;//输出4
return 0;
}
3.set集合容器
集合具有高效的删除处理功能,并自动重新调整内部的红黑树的平衡
#include<stdio.h>
#include<algorithm>
#include<set>
using namespace std;
int main()
{
set<int>s;
s.insert(8);
s.insert(1);
s.insert(12);
s.insert(6);
s.insert(8);//第二次插入8,元素重复,不会插入
set<int>::iterator it;//定义前向迭代器
for(it=s.begin();it!=s.end();it++)//中序遍历集合中的元素
cout<<*it<<" ";
cout<<endl;
set<int>::reverse_iterator rit;//定义反向迭代器,反向遍历集合中的元素
for(rit=s.rbegin();rit!=s.rend();rit++)
cout<<*rit<<" ";
cout<<endl;
s.erase(6);//删除值为6的元素
it=s.find(8);//查找值为8的元素
if(it!=s.end())//找到
cout<<*it<<endl;
else//没找到
cout<<"not find it"<<endl;
s.clear();//清空集合
cout<<s.size()<<endl;//输出集合大小,为0
return 0;
}
4.multiset多重集合容器
multiset与set一样,唯一不同的是multiset允许重复的元素插入,而set不允许
#include<iostream>
#include<stdio.h>#include<algorithm>
#include<set>
using namespace std;
int main()
{
multiset<string>s;//定义元素类型为string的多重集合对象s
s.insert("abc");
s.insert("123");
s.insert("111");
s.insert("aaa");
s.insert("123");
multiset<string>::iterator it;
for(it=s.begin();it!=s.end();it++)
cout<<*it<<" ";
cout<<endl;
int n=s.erase("123");//删除值为“123”的所有重复元素,返回删除元素总数n
cout<<n<<endl;
for(it=s.begin();it!=s.end();it++)//输出删除后剩余的元素
cout<<*it<<" ";
cout<<endl;
it=s.find("123");
if(it!=s.end())//找到
cout<<*it<<endl;
else//没有找到
cout<<"not find it"<<endl;
return 0;
}
5.map映照容器
#include<iostream>
#include<algorithm>#include<map>
#include<string>
using namespace std;
struct mycomp//自定义函数,按键值由大到小顺序将元素插入到map中
{
bool operator()(const int &a,const int &b)
{
if(a!=b)return a>b;
else return a>b;
}
};
int main()
{
map<string,double> m;//定义map对象
//插入元素,按照键值的由小到大放入红黑树中
m["Jack"] = 98.5;
m["Bomi"] = 96.0;
m["Kate"] = 97.5;
map<string,double>::iterator it;//前向遍历元素
for(it=m.begin();it!=m.end();it++)
cout<<(*it).first<<" : "<<(*it).second<<endl;//输出键值与映照数据
map<int,char,mycomp>mm;
mm[25] = 'm';
mm[28] = 'k';
mm[10] = 'x';
mm[30] = 'a';
mm[32] = 'b';
mm.erase(28);//删除键值为28的元素
map<int,char,mycomp>::reverse_iterator rit;//反向遍历元素
for(rit=mm.rbegin();rit!=mm.rend();rit++)
cout<<(*rit).first<<" : "<<(*rit).second<<endl;
map<int,char,mycomp>::iterator rrit;
rrit=mm.find(28);
if(rrit!=mm.end())//搜索到该元素
cout<<(*rrit).first<<" : "<<(*rrit).second<<endl;
else cout<<"not find it"<<endl;//未找到
for(rrit=mm.begin();rrit!=mm.end();rrit++)
cout<<(*rrit).first<<" : "<<(*rrit).second<<endl;
//数字映照字符的map写法
string s="The number is ";
cout<<s+mm[30]<<endl;
return 0;
}
6.multimap多重映照容器
multimap与map基本相同,唯独不同的是multimap允许重复键值插入,所以,multimap元素的插入、删除、查找都与map不同
#include<iostream>
#include<algorithm>#include<map>
#include<string>
using namespace std;
int main()
{
multimap<string,double>m;
m.insert(pair<string,double>("Jack",300.5));//插入元素
m.insert(pair<string,double>("Kity",200));
m.insert(pair<string,double>("Memi",500));
m.insert(pair<string,double>("Jack",306));//重复键值“Jack”插入
multimap<string,double>::iterator it;//定义前向迭代器中序遍历multimap
for(it=m.begin();it!=m.end();it++)
cout<<(*it).first<<" : "<<(*it).second<<endl;
m.erase("Jack");//删除键值为“Jack”的元素
it=m.find("Memi");//查找键值
return 0;
}