1.编写一个循环将list容器的元素逆序输出
#include <iostream>
#include <list>
using namespace std;
int main(void)
{
int a[10] = {0,1,2,3,4,5,6,7,8,9};
list<int> list1(a,a+10);
list<int>::iterator iter1 = list1.begin(), iter2 = list1.end();
while(iter2 != iter1)
cout<<*(--iter2);
cout<<endl;
return 0;
}
2.比较两个容器是否相等
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
vector<int> ivec;
vector<int> ilist;
int val;
string stringa;
cout<<"请输入vector元素"<<endl;
while(cin >> val || cin.fail())
{
if(cin.fail())
{
cin.clear();
cin.sync();
break;
}
ivec.push_back(val);
}
cout<<"请输入list元素"<<endl;
while(cin >> val)
{
ilist.push_back(val);
}
vector<int>::iterator iter1 = ivec.begin();
vector<int>::iterator iter2 = ilist.begin();
while((iter1 != ivec.end()) && (iter2 != ilist.end()))
{
if(*iter1 != *iter2)
break;
++iter1;
++iter2;
}
if((iter1 == ivec.end()) && (iter2 == ilist.end()))
{
cout<<"vector and list have the same emle"<<endl;
}
else
{
cout<<"vector and list different"<<endl;
}
return 0;
}
3.编写一个函数,其形参是一对迭代器和一个int型数值,实现在迭代器标记的范围内寻找该int型数值的功能,并返回一个bool的结果,以指明是否找到指定的数据。
#include <iostream>
#include <vector>
using namespace std;
bool findInt(vector<int>::iterator beg,vector<int>::iterator end,int ival)
{
while(beg != end)
{
if(*beg == ival)
break;
else
++beg;
}
if(beg != end)
return true;
else
return false;
}
int main(void)
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
bool f;
vector<int> ivec(a,a+10);
vector<int>::iterator iter1 = ivec.begin(),iter2 = ivec.end();
f = findInt(iter1,iter2,5);
if(f)
cout<<"find it"<<endl;
else
cout<<"cann't find it"<<endl;
return 0;
}
4.重写程序,查找元素的值,并且返回指向找到元素的迭代器,确保程序在寻找的元素不存在时也能正确工作。
#include <iostream>
#include <vector>
using namespace std;
vector<int>::iterator findint(vector<int>::iterator beg,vector<int>::iterator end,int val)
{
while(beg != end)
{
if(*beg == val)
break;
else
++beg;
}
return beg;
}
int main(void)
{
int ia[10]={0,1,2,3,4,5,6,7,8,9};
vector<int> ivec(ia,ia+9);
//读取要找的数据
cout<<"Enter a integer: "<<endl;
int ival;
cin >> ival;
vector<int>::iterator it;
it = findint(ivec.begin(),ivec.end(),ival);
if(it != ivec.end())
cout<< ival <<"is a member of vector"<<endl;
else
cout<< ival <<"is not a member of vector"<<endl;
return 0;
}
为了提高程序的通用性,使得对于不同类型的迭代器及元素类型,都能使用同一查找函数进行查找。
使用函数模版
template<typename T1,typename T2>
T1 findValue(T1 beg ,T1 end,T2 val)
{
while(beg != end)
{
if(*beg == val)
break;
else
++beg;
}
return beg;
}
5.insert 函数返回指向这个元素的迭代器
#include <iostream>
#include <list>
using namespace std;
int main(void)
{
list<string> slist;
list<string>::iterator iter = slist.begin();
string word;
while(cin >> word)
iter = slist.insert(iter,word);
for(list<string>::iterator iter = slist.begin(); iter != slist.end(); ++iter)
{
cout<<*iter<<endl;
}
return 0;
}
6.编写程序将int型的list容器的所有元素复制到两个deque容器中。list容器的元素如果为偶数,则复制一个deque容器中,如果为基数,则复制到另一个deque容器里
#include <iostream>
#include <list>
#include <deque>
using namespace std;
int main(void)
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
list<int> ilist(a,a+10);
deque<int> deque1,deque2;
deque<int>::iterator ideq1 = deque1.begin(),ideq2 = deque2.begin();
for(list<int>::iterator iter = ilist.begin(); iter != ilist.end(); ++iter)
{
if((*iter %2) == 0)
deque1.push_back(*iter);
else
deque2.push_back(*iter);
}
for(ideq1 = deque1.begin(); ideq1 != deque1.end();++ideq1)
cout<<*ideq1<<endl;
cout<<"***********************************************************"<<endl;
for(ideq2 = deque2.begin(); ideq2 != deque2.end();++ideq2)
cout<<*ideq2<<endl;
return 0;
}
7.假设有如下ia的定义,将ia复制到一个vector容器和一个list容器中,使用单个迭代器参数版本erase函数将list容器中的奇数值元素删除掉,然后将vector容器中的偶数值元素删除掉
#include <iostream>
#include <vector>
#include <list>
using namespace std;
int main(void)
{
int ia[]={0,1,2,3,4,5,6,7,8,9};
vector<int> ivec(ia,ia+10);
list<int> ilst(ia,ia+10);
for(list<int>::iterator lit = ilst.begin(); lit != ilst.end();++lit)
{
if(*lit %2 != 0)
{
lit = ilst.erase(lit);
--lit; //迭代器回退,指向被删除元素的前一元素
}
}
for(vector<int>::iterator vit = ivec.begin(); vit != ivec.end();++vit)
{
if(*vit %2 == 0)
{
vit = ivec.erase(vit);
--vit;
}
}
for(list<int>::iterator lit = ilst.begin(); lit != ilst.end();++lit)
{
cout<<*lit<< " ";
}
cout<<endl;
for(vector<int>::iterator lit = ivec.begin(); lit != ivec.end();++lit)
{
cout<<*lit<< " ";
}
cout<<endl;
return 0;
}
8.编写程序将一个list容器的所有元素赋值给一个vector容器,其中的list容器中的存储的是指向c风格的char *指针,而vector容器的元素则是string类型
#include <iostream>
#include <vector>
#include <list>
using namespace std;
int main()
{
char * sa[]={"Mary","Tom","Bob","Alice"};
list<char *> slst(sa,sa+4);
vector<string> svec;
string str;
svec.assign(slst.begin(),slst.end());
for(list<char *>::iterator lit = slst.begin(); lit != slst.end();++lit)
{
cout<<*lit<<" ";
}
cout<<endl;
for(vector<string>::iterator vit = svec.begin(); vit != svec.end();++vit)
{
cout<<*vit<<" ";
}
cout<<endl;
return 0;
}