问题:关于back_inserter的工作原理
问题:关于back_inserter的工作原理
下面这个小程序,第二个copy用的v.begin()返回一个iterator,这个iterator实现了operator*()等。
但是第一个back_inserter是个函数模板,传入参数可以是数组或者容器。
那么back_inserter怎么知道,如何去取元素?
它不知道传入的v是个vector可以调begin(),v可能是个普通数组。
我在VC下看back_inserter的实现代码,一层套一层的太复杂了。
各位高人可以简单的解释一下么
- C/C++ code
#include "stdafx.h"#include<string>#include<vector>#include<iostream>#include<algorithm>#include<iterator>#include<functional>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ typedef vector<int> vi; vi v; int buf[2]={1,2}; copy(buf,buf+2,back_inserter(v)); copy(buf,buf+2,v.begin()); return 0;}
[解决办法]
对于STL,Vector已经实现了end这个迭代器。所以调用BackInsert的时候是调用了end这个迭代器;如果没有实现这个迭代器的话,那么能够调用BackInsert的STL必须是连续存储的,能够用指针代替迭代器的。
[解决办法]
看源码吧,++,*等操作符都被忽略了,调用copy赋值给这个对象时,调用operator =,调用容器指针的p
push_back。
v是数组则编译不过。