【解答】
假设vector容器中ivec中的序列为1 2 3 4 100 5 100,将ivec复制给list容器ilst,并将ivec中值为100的元素替换为0值
使用inserter实现:
replace_copy(ivec.begin(),ivec.end(),
inserter(ilst,ilst.begin()),100,0);
在输出序列中的固定位置实现插入,因此ilst中的序列为:
12 3 4 0 5 0
使用back_inserter实现:
replace_copy(ivec.begin(),ivec.end(),
back_inserter(ilst),100,0);
总是在输出序列的前端实现插入,因此ilst中的序列为:
1 2 3 4 0 5 0
使用front_inserter实现:
replace_copy(ivec.begin(),ivec.end(),
front_inserter(ilst),100,0);
总是在输出序列的前端实现插入,因此ilst中的序列为:
0 5 0 4 3 2 1
完整程序如下:
//11.14.cpp
//使用replace_copy将一个vector容器中的序列复制给一个list容器中
//并将前一个序列中的值替换为指定的新值。
//分别使用inserter、back_inserter和front_inserter实现
#include<iostream>
#include<list>
#include<vector>
#include<algorithm>
#include<iterator>
using namespace std;
int main()
{
int ia[]={1,2,3,4,100,5,100};
vector<int> ivec(ia,ia+7);
list<int> ilst;
//将ivec复制给ilst,并将ivec中的值为100的元素替换为0值
//使用inserter实现
//replace_copy(ivec.begin(),ivec.end(),
// inserter(ilst,ilst.begin()),100,0);
//使用back_inserter实现:
//replace_copy(ivec.begin(),ivec.end(),
// back_inserter(ilst),100,0);
//使用front_inserter
replace_copy(ivec.begin(),ivec.end(),
front_inserter(ilst),100,0);
//输出ilst容器
cout<<"ilst:"<<endl;
for(list<int>::iterator iter=ilst.begin();
iter!=ilst.end();++iter)
cout<<*iter<<" ";
cout<<endl;
return 0;
}