几个容器比较容易混淆的方法(推荐)

本文详细介绍了C++ STL标准模板库中vector、list、map及set等容器的插入(insert)与删除(erase)操作,并通过具体示例展示了如何使用这些函数。包括单个元素的插入与删除、范围插入与删除以及如何处理重复键值等情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vector:

iterator insert(iterator it, const T& x = T());

void insert(iterator it, size_type n, const T& x);

void insert(iterator it,const_iterator first, const_iterator last);

iterator erase(iterator it);

iterator erase(iterator first, iterator last);

list:

iterator insert(iterator it, const T& x = T()); //list没有下标操作 [],at()

void insert(iterator it, size_type n, const T& x);

void insert(iterator it,const_iterator first, const_iterator last);

void insert(iterator it,const T *first, const T *last);

iterator erase(iterator it);

iterator erase(iterator first, iterator last);

map:

pair<iterator, bool> insert(const value_type& x);

iterator insert(iterator it, const value_type& x);

void insert(const value_type *first, const value_type *last);

iterator erase(iterator it);

iterator erase(iterator first, iterator last);

size_type erase(const Key& key);

set:

pair<iterator, bool> insert(const value_type& x);

iterator insert(iterator it, const value_type& x);

void insert(InIt first, InIt last);

iterator erase(iterator it);

iterator erase(iterator first, iterator last);

size_type erase(const Key& key);

下面的代码是一一对应上面的函数原型的:

vector:

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
vector<int>v(a,a+10);
for(vector<int>::iterator itera=v.begin();itera!=v.end();++itera){
cout<<*itera<<" ";
}
cout<<endl;
vector<int>::iterator it1=v.insert(v.begin()+2,10086);//在指定迭代器前面插入一个元素,返回一个迭代器,指向插入的元素
cout<<*it1<<endl;
for(vector<int>::iterator iterb=v.begin();iterb!=v.end();++iterb){
cout<<*iterb<<" ";
}
cout<<endl;
system("pause");
return 0;
}

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
vector<int>v(a,a+10);
for(vector<int>::iterator itera=v.begin();itera!=v.end();++itera){
cout<<*itera<<" ";
}
cout<<endl;
v.insert(v.begin()+2,5,10086);
for(vector<int>::iterator iterb=v.begin();iterb!=v.end();++iterb){
cout<<*iterb<<" ";
}
cout<<endl;

system("pause");
return 0;
}
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
int b[]={11,22,33,44,55,66,77,88,99,1010};
vector<int>va(a,a+10);
vector<int>vb(b,b+10);
for(vector<int>::iterator itera=va.begin();itera!=va.end();++itera){
cout<<*itera<<" ";
}
cout<<endl;
va.insert(va.begin()+5,vb.begin(),vb.end());
for(vector<int>::iterator iterb=va.begin();iterb!=va.end();++iterb){
cout<<*iterb<<" ";
}
cout<<endl;
system("pause");
return 0;
}

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
vector<int>v(a,a+10);
for(vector<int>::iterator itera=v.begin();itera!=v.end();++itera){
cout<<*itera<<" ";
}
cout<<endl;
vector<int>::iterator it=v.erase(v.begin()+4);//返回一个迭代器,指向被删除的后一个元素
cout<<*it<<endl;
for(vector<int>::iterator iterb=v.begin();iterb!=v.end();++iterb){
cout<<*iterb<<" ";
}
cout<<endl;
system("pause");
return 0;
}

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
vector<int>v(a,a+10);
for(vector<int>::iterator itera=v.begin();itera!=v.end();++itera){
cout<<*itera<<" ";
}
cout<<endl;
vector<int>::iterator it=v.erase(v.begin()+3,v.begin()+6);//返回一个迭代器,指向被删除的后一个元素
cout<<*it<<endl;
for(vector<int>::iterator iterb=v.begin();iterb!=v.end();++iterb){
cout<<*iterb<<" ";
}
cout<<endl;
system("pause");
return 0;
}

list:

#include<iostream>
#include<string>
#include<list>
using namespace std;
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
list<int>l(a,a+10);
for(list<int>::iterator itera=l.begin();itera!=l.end();++itera){
cout<<*itera<<" ";
}
cout<<endl;
list<int>::iterator it=l.begin();
for(int i=0;i<3;++i){//因为list的迭代器不支持+操作,不能l.begin()+3
++it;
}
list<int>::iterator ite=l.insert(it,10086);
cout<<*ite<<endl;
for(list<int>::iterator iterb=l.begin();iterb!=l.end();++iterb){
cout<<*iterb<<" ";
}
cout<<endl;
system("pause");
return 0;
}

#include<iostream>
#include<list>
#include<string>
using namespace std;
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
list<int>l(a,a+10);
for(list<int>::iterator itera=l.begin();itera!=l.end();++itera){
cout<<*itera<<" ";
}
cout<<endl;
l.insert(l.end(),5,10086);
for(list<int>::iterator iterb=l.begin();iterb!=l.end();++iterb){
cout<<*iterb<<" ";
}
cout<<endl;
system("pause");
return 0;
}

#include<iostream>
#include<list>
#include<string>
#include<vector>
using namespace std;
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
int b[]={11,22,33,44,55,66,77,88,99,1010};
list<int>l(a,a+10);
vector<int>v(b,b+10);
for(list<int>::iterator itera=l.begin();itera!=l.end();++itera){
cout<<*itera<<" ";
}
cout<<endl;
l.insert(l.begin(),v.begin()+3,v.begin()+6);
for(list<int>::iterator iterb=l.begin();iterb!=l.end();++iterb){
cout<<*iterb<<" ";
}
cout<<endl;
system("pause");
return 0;
}

#include<iostream>
#include<list>
#include<string>
using namespace std;
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
list<int>l(a,a+10);
for(list<int>::iterator itera=l.begin();itera!=l.end();++itera){
cout<<*itera<<" ";
}
cout<<endl;
list<int>::iterator it=l.begin();
for(int i=0;i<3;++i){
++it;
}
list<int>::iterator ite=l.erase(it);//返回一个迭代器,指向被删除的元素的后一个元素
cout<<*ite<<endl;
for(list<int>::iterator iterb=l.begin();iterb!=l.end();++iterb){
cout<<*iterb<<" ";
}
cout<<endl;
system("pause");
return 0;
}


#include<iostream>
#include<list>
#include<string>
using namespace std;
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
list<int>l(a,a+10);
for(list<int>::iterator itera=l.begin();itera!=l.end();++itera){
cout<<*itera<<" ";
}
cout<<endl;
list<int>::iterator it1=l.begin();
for(int i=0;i<3;++i){
++it1;
}
list<int>::iterator it2=l.begin();
for(int j=0;j<5;++j){
++it2;
}
list<int>::iterator ite=l.erase(it1,it2);//返回一个迭代器,指向被删除元素的后一个元素
cout<<*ite<<endl;
for(list<int>::iterator iterb=l.begin();iterb!=l.end();++iterb){
cout<<*iterb<<" ";
}
cout<<endl;
system("pause");
return 0;
}

普及一下pair<type,type>的知识:

#include<iostream>
#include<utility>
#include<string>
using namespace std;
int main(){
string name="zhang";
int age=22;
pair<string,int>p(name,age);
cout<<p.first<<"------->"<<p.second<<endl;
system("pause");
return 0;
}

map:

#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(){
map<string,int>m;
string name;
int age;
while(cin>>name>>age){
pair<map<string,int>::iterator,bool>ret=m.insert(make_pair(name,age));
if(!ret.second){
(*ret.first).second++;
}
}
for(map<string,int>::iterator itera=m.begin();itera!=m.end();++itera){
cout<<(*itera).first<<"------->"<<(*itera).second<<endl;
}
system("pause");
return 0;
}

#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(){
map<string,int>m;
string name;
int age;
while(cin>>name>>age){
m.insert(make_pair(name,age));
}
for(map<string,int>::iterator itera=m.begin();itera!=m.end();++itera){
cout<<(*itera).first<<"---->"<<(*itera).second<<endl;
}
cout<<endl;
cin.clear();

map<string,int>::iterator it=m.begin();
++it;
cout<<"input type_value"<<endl;
cin>>name>>age;
map<string,int>::iterator ite=m.insert(it,make_pair(name,age));
cout<<(*ite).first<<"------->"<<(*ite).second<<endl;

for(map<string,int>::iterator iterb=m.begin();iterb!=m.end();++iterb){
cout<<(*iterb).first<<"----->"<<(*iterb).second<<endl;
}
system("pause");
return 0;
}

#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(){
map<string,int>m;
map<string,int>mm;
string name;
int age;
cout<<"第一组数据"<<endl;
while(cin>>name>>age){
m.insert(make_pair(name,age));
}
for(map<string,int>::iterator itera=m.begin();itera!=m.end();++itera){
cout<<(*itera).first<<"------->"<<(*itera).second<<endl;
}
cout<<endl;

cout<<"第二组数据"<<endl;
cin.clear();
while(cin>>name>>age){
mm.insert(make_pair(name,age));
}
for(map<string,int>::iterator iterb=mm.begin();iterb!=mm.end();++iterb){
cout<<(*iterb).first<<"------->"<<(*iterb).second<<endl;
}
cout<<endl;
cout<<"把第二组数据插入到第一组数据得到:"<<endl;
mm.insert(m.begin(),m.end());
for(map<string,int>::iterator iterc=mm.begin();iterc!=mm.end();++iterc){
cout<<(*iterc).first<<"------>"<<(*iterc).second<<endl;
}
cout<<endl;
system("pause");
return 0;
}
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(){
map<string,int>m;
string name;
int age;
while(cin>>name>>age){
m.insert(make_pair(name,age));
}
for(map<string,int>::iterator itera=m.begin();itera!=m.end();++itera){
cout<<(*itera).first<<"----->"<<(*itera).second<<endl;
}
cout<<endl;
cout<<"*************"<<endl;
map<string,int>::iterator it=m.begin();
++it; //map的迭代器也是不能+操作的,只能用++操作
map<string,int>::iterator ite=m.erase(it);
cout<<(*ite).first<<"----->"<<(*ite).second<<endl;//返回一个迭代器,指向被删除元素的下一个
cout<<"**************"<<endl;
for(map<string,int>::iterator iterb=m.begin();iterb!=m.end();++iterb){
cout<<(*iterb).first<<"-------->"<<(*iterb).second<<endl;
}
cout<<endl;
system("pause");
return 0;
}
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(){
map<string,int>m;
string name;
int age;
while(cin>>name>>age){
m.insert(make_pair(name,age));
}
for(map<string,int>::iterator itera=m.begin();itera!=m.end();++itera){
cout<<(*itera).first<<"----->"<<(*itera).second<<endl;
}
map<string,int>::iterator it1=m.begin();
map<string,int>::iterator it2=m.begin();
for(int i=0;i<3;i++){
++it1;
}
for(int j=0;j<6;++j){
++it2;
}
cout<<"***************************"<<endl;
map<string,int>::iterator ite=m.erase(it1,it2);//返回一个迭代器,指向被删除元素的下一个
cout<<(*ite).first<<"----->"<<(*ite).second<<endl;
cout<<"***************************"<<endl;
for(map<string,int>::iterator iterb=m.begin();iterb!=m.end();++iterb){
cout<<(*iterb).first<<"------>"<<(*iterb).second<<endl;
}
system("pause");
return 0;
}
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(){
map<string,int>m;
string name;
int age;
while(cin>>name>>age){
m.insert(make_pair(name,age));
}
for(map<string,int>::iterator itera=m.begin();itera!=m.end();++itera){
cout<<(*itera).first<<"----->"<<(*itera).second<<endl;
}
cout<<"input the keytype you want to delete"<<endl;
cin.clear();
cin>>name;
int t=m.erase(name);
cout<<t<<endl;
cout<<"***************"<<endl;
for(map<string,int>::iterator iterb=m.begin();iterb!=m.end();++iterb){
cout<<(*iterb).first<<"----->"<<(*iterb).second<<endl;
}
system("pause");
return 0;
}
set:
#include<iostream>
#include<string>
#include<set>
using namespace std;
int main(){
set<string>s;
string name;
while(cin>>name){
s.insert(name);
}
for(set<string>::iterator itera=s.begin();itera!=s.end();++itera){
cout<<*itera<<" ";
}
cout<<endl;
system("pause");
return 0;
}
由于set的操作跟map的操作及其相似,这里不一一列举,有什么不清楚的,可以回帖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值