1.参考http://www.cplusplus.com网站关于back_insert_iterator与back_inserter的介绍之后,我总算明白了:back_insert_iterator,顾名思义是个迭代器(后缀iterator),是一个模板类。而back_inserter是一个模板函数,实现在容器尾部插入元素。

back_insert_iterator:

template <class Container> class back_insert_iterator;//模板类

back_inserter:

template <class Container>
back_insert_iterator<Container> back_inserter (Container& x);//模板函数,返回值为back_insert_iterator模板类对象

2.例子代码:

#include <iostream>
#include <vector>
#include <list>
#include <iterator> using namespace std;
template<typename T> void PrintElements(T c)
{
T::const_iterator itr = c.begin();
while(itr != c.end())
cout << *itr++ <<" ";
} int main()
{
vector<int> vecSrc;
list<int> vecDest; for(vector<int>::size_type i = 0; i < 3; ++i)
vecSrc.push_back(i); // 1. 类back_insert_iterator与函数back_inserter
// explicit back_insert_iterator(Container& _Cont);
// template<class Container> back_insert_iterator<Container> back_inserter(Container& _Cont);
copy(vecSrc.begin(), vecSrc.end(), back_insert_iterator<list<int> >(vecDest));
// copy(vecSrc.begin(), vecSrc.end(), back_inserter(vecDest)); // 效果一样
PrintElements(vecDest);
cout << endl; // 2. 类front_insert_iterator与函数front_inserter
// explicit front_insert_iterator(Container& _Cont);
// template<class Container> front_insert_iterator<Container> front_inserter(Container& _Cont);
copy(vecSrc.begin(), vecSrc.end(), front_insert_iterator<list<int> >(vecDest));
// copy(vecSrc.begin(), vecSrc.end(), front_inserter(vecDest));
PrintElements(vecDest);
cout << endl; // 3. 类insert_iterator与函数inserter
// insert_iterator(Container& _Cont, typename Container::iterator _It);
// template<class Container> insert_iterator<Container> inserter(Container& _Cont, typename Container::iterator _Where);
copy(vecSrc.begin(), vecSrc.end(), insert_iterator<list<int> >(vecDest, ++vecDest.begin()));
// copy(vecSrc.begin(), vecSrc.end(), inserter(vecDest, ++vecDest.begin()));
PrintElements(vecDest); return 0;
}

效果一样的原因就是因为back_inserter(X)函数返回的是指向容器X末端的一个back_insert_iterator类对象。

3.back_insert_iterator是适配器,还是back_inserter是适配器?

STL中,back_insert_iterator与back_inserter的区别。的更多相关文章

  1. STL中mem_fun与mem_fun_ref的区别[转]

    http://www.cnblogs.com/Purple_Xiapei/archive/2012/05/27/2520483.html STL中mem_fun和mem_fun_ref的用法 分类:  ...

  2. STL中vector、list、deque和map的区别

    1 vector     向量 相当于一个数组    在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capac ...

  3. 【转】STL中vector、list、deque和map的区别

    1.vector 向量 相当于一个数组 在内存中分配一块连续的内容空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数 ...

  4. STL中六大组件

    1)容器(Container),是一种数据结构,如list,vector,和deques ,以模板类的方法提供.为了访问容器中的数据,可以使用由容器类输出的迭代器: 容器(container)用于存放 ...

  5. C++ STL中vector(向量容器)使用简单介绍

    原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相 ...

  6. C++ STL中的常用容器浅谈

    STL是C/C++开发中一个非常重要的模板,而其中定义的各种容器也是非常方便我们大家使用.下面,我们就浅谈某些常用的容器.这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点.STL中 ...

  7. 适配器模式—STL中的适配器模式分析

    适配器模式通常用于将一个类的接口转换为客户需要的另外一个接口,通过使用Adapter模式能够使得原本接口不兼容而不能一起工作的类可以一起工作. 这里将通过分析c++的标准模板库(STL)中的适配器来学 ...

  8. STL中关于map和set的四个问题?

    STL map和set的使用虽不复杂,但也有一些不易理解的地方,如: 为何map和set的插入删除效率比用其他序列容器高? 或许有得人能回答出来大概原因,但要彻底明白,还需要了解STL的底层数据结构. ...

  9. 图论中DFS与BFS的区别、用法、详解…

    DFS与BFS的区别.用法.详解? 写在最前的三点: 1.所谓图的遍历就是按照某种次序访问图的每一顶点一次仅且一次. 2.实现bfs和dfs都需要解决的一个问题就是如何存储图.一般有两种方法:邻接矩阵 ...

随机推荐

  1. Java中4种权限的理解

    1.  包访问权限 (1)包的理解:将一组相关的.有意义的类文件组织在一起(即相应的.java文件放在一个文件夹下)就构成了包或者类库.(每个类文件的开头都包含一个所属包的声明“package pac ...

  2. jq指定行切换

    function G(){ var item=$('.req_list_item>li'); item.find($('.req_show')).hover(function(){ $(this ...

  3. Java使用poi包读取Excel文档

    项目需要解析Excel文档获取数据,就在网上找了一些资料,结合自己这次使用,写下心得: 1.maven项目需加入如下依赖: <dependency> <groupId>org. ...

  4. 最最常用的 100 个 Java 类(转)

    大部分的 Java 软件开发都会使用到各种不同的库.近日我们从一万个开源的 Java 项目中进行分析,从中提取出最常用的 Java 类,这些类有来自于 Java 的标准库,也有第三方库.每个类在同一个 ...

  5. iOS8及以后 地图定位当前城市

    通过以下网址的步骤实现定位获取城市的功能 http://www.2cto.com/kf/201504/393312.html

  6. POJ 2449 Remmarguts' Date (SPFA + A星算法) - from lanshui_Yang

    题目大意:给你一个有向图,并给你三个数s.t 和 k ,让你求从点 s 到 点 t 的第 k 短的路径.如果第 k 短路不存在,则输出“-1” ,否则,输出第 k 短路的长度. 解题思路:这道题是一道 ...

  7. resin安装

    1. 说明 Resin版本:resin-3.1.6 2. 安装jdk 安装jdk-1_5_0_09-windows-i586-p.exe程序到相应目录. (假设安装到D:\ jdk1.5.0_09) ...

  8. 重新认识Intent

    相信android开发工程师,对Intent一定不陌生,在整个开发中随时都用到了,今天我们总结一下Intent. 1. 为什么需要Intent? 在android Intent机制是协助应用间的交互与 ...

  9. SSH Secure Shell Client连接Linux 命令行显示中文乱码问题 和oracle 查询数据中文乱码问题

    一.SSH Secure Shell Client连接Linux 命令行显示中文乱码问题 linux 设置系统语言 修改 /etc/sysconfig/i18n 文件,如 LANG="en_ ...

  10. C#类的基本用法

    Preson类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...