/*
假设有【任意定义】的数组 ia ,将 ia 复制到一个 vector 容器和一个 list 容器中。使用单个迭代器参数版本的 erase
函数将 list 容器中的奇数值元素删除掉,然后将vector 容器中的偶数值元素删除掉。
*/
#include "iostream"
#include "vector"
#include "deque"
#include "list"
using namespace std;
int main()
{
// 用于输入任意的元素保存在ia数组中。
vector<int> ivsource;
int iVal;
while (cin>>iVal)
{
ivsource.push_back(iVal);
}
cin.clear();
int * ia=new int[ivsource.size()];
vector<int>::iterator iter=ivsource.begin();
for (size_t i=0;i!=ivsource.size(),iter!=ivsource.end();++i,++iter)
{
*(ia+i)=*iter;
}
//把ia数组中的内容分别保存在vector和list中
list<int> ilist(ia,ia+ivsource.size());
vector<int> ivector(ia,ia+ivsource.size());
//输出没有处理前的vector中的元素
cout<<"输出没有处理前的vector中的元素"<<endl;
for (vector<int>::iterator iter=ivector.begin();iter!=ivector.end();++iter)
{
cout<<*iter<<" ";
}
cout<<endl;
//输出没有处理前的list中的元素
cout<<"输出没有处理前的list中的元素"<<endl;
for (list<int>::iterator iter=ilist.begin();iter!=ilist.end();++iter)
{
cout<<*iter<<" ";
}
//删除vector中的偶数元素
for (vector<int>::iterator iter=ivector.begin();iter!=ivector.end();)
{
if (*iter%2==0)
{
iter=ivector.erase(iter);
}
else
{
++iter;
}
}
//输出处理后的vector中的元素
cout<<"\n输出处理后的vector中的元素"<<endl;
for (vector<int>::iterator iter=ivector.begin();iter!=ivector.end();++iter)
{
cout<<*iter<<" ";
}
cout<<endl;
//删除list中的奇数元素
for (list<int>::iterator iter=ilist.begin();iter!=ilist.end();)
{
if (*iter%2==1)
{
iter=ilist.erase(iter);
/*
不要使用:iter=ilist.erase(iter);
--iter;
然后在for循环的最后一个位置上使用++iter
因为返回的迭代器已经指向了被删除元素的下一个位置,所以我们没有必要再次的移动回来。然后在for循环中++iter
*/
}
else
{
++iter;
}
}
//输出处理后的list中的元素
cout<<"输出处理后的list中的元素"<<endl;
for (list<int>::iterator iter=ilist.begin();iter!=ilist.end();++iter)
{
cout<<*iter<<" ";
}
cout<<endl;
return 0;
}
/*
假设有如下 ia 的定义,将 ia 复制到一个 vector 容器和一个 list 容器中。使用单个迭代器参数版本的 erase
函数将 list 容器中的奇数值元素删除掉,然后将vector 容器中的偶数值元素删除掉。
int ia[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 55, 89 };
*/
#include "iostream"
#include "vector"
#include "string"
#include "list"
#include "deque"
#include "algorithm"
using namespace std;
int main()
{
int ia[]={0,1,1,2,3,5,8,13,21,55,89};
int i=(sizeof(ia)/sizeof(*ia));
vector<int> ivec(ia,ia+i);
list<int> ilst(ia,ia+i);
cout<<"删除元素之前的vector:"<<endl;
for (vector<int>::iterator it=ivec.begin();it!=ivec.end();++it)
{
cout<<*it<<" ";
}
cout<<"\n删除元素之前的list"<<endl;
for (list<int>::iterator it=ilst.begin();it!=ilst.end();++it)
{
cout<<*it<<" ";
}
for (vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
{
if (*iter%2==0)
{
iter=ivec.erase(iter);
}
}
for (list<int>::iterator lit=ilst.begin();lit!=ilst.end();++lit)
{
if(*lit%2==1)
{
lit=ilst.erase(lit);
--lit;
}
}
cout<<"\n删除元素之后的vector:"<<endl;
for (vector<int>::iterator it=ivec.begin();it!=ivec.end();++it)
{
cout<<*it<<" ";
}
cout<<"\n删除元素之后的list"<<endl;
for (list<int>::iterator it=ilst.begin();it!=ilst.end();++it)
{
cout<<*it<<" ";
}
cout<<endl;
return 0;
}
/*
编写程序将 int 型的 list 容器的所有元素复制到两个 deque 容器中。list 容器的元素如果为偶数,则复制到
一个 deque 容器中;如果为奇数,则复制到另一个 deque 容器里。
奇数odd 偶数 even
pop_back()操作会擦除最后一个元素,但是不会返回这个数值。
back()操作会返回最后一个元素,但是不会擦除这个数值。
*/
#include "iostream"
#include "vector"
#include "string"
#include "list"
#include "deque"
using namespace std;
int main()
{
int popVal=0;
list<int> listint;
int i=0;
while (i!=10)
{
listint.push_back(i);
++i;
}
deque<int> odd,even;
while (!listint.empty())
{
popVal=listint.back();
listint.pop_back();
if (popVal%2==0)
{
even.push_back(popVal);
}
else
{
odd.push_back(popVal);
}
}
while (!odd.empty())
{
cout<<odd.back()<<" ";
odd.pop_back();
}
cout<<endl;
while (!even.empty())
{
cout<<even.back()<<" ";
even.pop_back();
}
return 0;
}