C++ Primer 第11章 习题11.14
【解答】
假设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中的序列为:
1 2 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; }