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. 基于Hadoop集群的HBase集群的配置

    一  Hadoop集群部署 hadoop配置 二 Zookeeper集群部署 zookeeper配置 三  Hbase集群部署 1.配置hbase-env.sh HBASE_MANAGES_ZK:用来 ...

  2. [Qt]No relevant classes found.

    [Qt]No relevant classes found. 我把两个文件加入工程的时候,再编译就出现了No relevant classes found.这个bug.百度了下,找到了答案,参考链接: ...

  3. Jetty监控线程使用情况的配置

    Jetty监控线程使用情况配置 第一步,配置xml文件 jetty-monitor.xml 参数说明: threads: 线程池中的线程 busyThreads: 使用中的线程 idleThreads ...

  4. (转)awk命令

    转自:http://man.lupaworld.com/content/manage/ringkee/awk.htm#id2874788 整理:Jims of 肥肥世家 <jims.yang@g ...

  5. 【MySQL】关于MySQL错误日志信息的收集

    为方便维护MySQL,写了个脚本用以提供收集错误信息的接口.这些错误信息来自与MySQL错误日志,而 通过grep mysql可以获取error-log的路径. #!/usr/bin/env pyth ...

  6. HTML, CSS学习笔记(完整版)

    第一章 div布局 前几课内容 .htm是早期的后缀.由于那时仅仅能支持长度为3的后缀.因此html与htm是一样的. shtml是server先处理然后再交给浏览器处理 #HTML小知识#之#XHT ...

  7. [Angular 2] Using Promise to Http

    You can also use Promise for http: So for the service, you need to call toPromise() method: getVehic ...

  8. ansible 学习与实践

    title: ansible 学习与实践 date: 2016-05-06 16:17:28 tags: --- ansible 学习与实践 一 介绍 ansible是新出现的运维工具是基于Pytho ...

  9. 去除html页面中按钮在ios中的默认样式,去除select自带的小三角图标

    btn{-webkit-appearance: none;} -webkit-appearance: none也能去掉select下拉列表后面自带的小三角

  10. 使用VS Code开发TypeScript--定义变量推荐使用let

    使用VS Code开发TypeScript--定义变量推荐使用let 目录 作用域规则 JavaScript的严格模式 let与var的区别 作用域规则 一直以来我们都是通过var关键字定义JavaS ...