//23:44 2010/6/6
……………………………浅谈算法back_inserter,front_inserter,inserter……………………………
#include
#include
#include
#include
using namespace std;
int main()
{
int ia[]={1,2,3,4,100,5,100};
vector
list
//replace_copy(ivec.begin(),ivec.end(),inserter(ilst,ilst.begin()),100,0);
//replace_copy(ivec.begin(),ivec.end(),back_inserter(ilst),100,0);
//replace_copy(ivec.begin(),ivec.end(),front_inserter(ilst),100,0);
return 0; 上面这一段代码是《C++ Primer》第四版中习题11.14的解答题答案。 能。 中所有元素都复制到结果,那么中间的inserter(),back_inserter(),front_inserter()这三个分别 有什么区别呢,看上面的运行结果,大家很容易就看出来了吧,第三个也就是front_inserter()是反向 输出的,为什么呢,应该这样子了理解: 这个2不是在1的后面,而是前面,于是就是2 1,以此类推就不难理解为什么显示结果是0 5 0 4 3 2 1了。 5 0了。 的理解,我把上面的代码稍微改动几个地方 #include using namespace std; int main() replace_copy(ivec.begin(),ivec.end(),inserter(ilst,ilst.begin()),100,0); cout<<"list: "< 执行结果依次是 1 2 3 4 0 5 0 0 0 0 0 0 0 0 这下应该很容易的掌握了back_inserter,front_inserter,inserter着三个算法的区别了吧。
cout<<"list: "<
cout<<*iter<<" ";
cout<
}
注:以上代码的三个//后面的代码分别表示不同的功能,调试的时候可以依次去掉,观察结果的不同。
以上三个结果执行结果依次是 1 2 3 4 0 5 0
1 2 3 4 0 5 0
0 5 0 4 3 2 1
这段代码主要在于帮助理解inserter(),back_inserter(),front_inserter()三个函数实现的不同功
要来理解三个函数就要先知道replace_copy()是做什么的,replace_copy 算法将范围 [first, last)
front_inserter()是实现总是在输出序列的前端实现插入,就是说第一个输出的是1,第二个是2,但是
back_inserter()是实现总是在输出序列的末端实现插入,所以也不难理解输出结果是1 2 3 4 0
OK,接下来时inserter(),大家看到上面的程序运行结果第一个和第二个貌似没有区别,为了更好更形象
#include
#include
#include
{
int ia[]={1,2,3,4,100,5,100};
vector
list
//replace_copy(ivec.begin(),ivec.end(),inserter(ilst,ilst.begin()),100,0);
//replace_copy(ivec.begin(),ivec.end(),inserter(ilst,++ilst.end()),100,0);
cout<<*iter<<" ";
cout<
return 0;
}
注:本段代码中初始化了ilst为七个0的容器。
0 1 2 3 4 0 5 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 2 3 4 0 5 0
//[email protected]
//fromlinge的C++交流群 8278237