您的位置:首页 > 编程语言 > C语言/C++

C++ Primer复习和学习笔记 第九章 顺序容器

2015-01-05 15:18 477 查看
/*
假设有【任意定义】的数组 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: