首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

有关问题:关于back_inserter的工作原理

2012-04-14 
问题:关于back_inserter的工作原理问题:关于back_inserter的工作原理下面这个小程序,第二个copy用的v.begi

问题:关于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是数组则编译不过。

热点排行