今天看到了一段代码 使用 数组去初始化赋值给list,就是把指针的首地址和end地址的下一位传递给list,把内存中这段长度copy到list中,

回忆起以前看到的一个资料

摘自C++ Primer

尽管不能直接将一种容器内的元素复制给另一种容器,但系统允许通过传递 一对迭代器间接实现该实现该功能。

使用迭代器时,不要求容器 类型相同。容器内的元素类型也可以不相同,只要它们相互兼容,能够将要复制 的元素转换为所构建的新容器的元素类型,即可实现复制。

迭代器标记了要复制的元素范围,这些元素用于初始化新容器的元素。

迭代 器标记出要复制的第一个元素和最后一个元素。

采用这种初始化形式可复制不能 直接复制的容器。更重要的是,可以实现复制其他容器的一个子序列:

// initialize slist with copy of each element of svec

list<string> slist(svec.begin(), svec.end());

// find midpoint in the vector

vector<string>::iterator mid = svec.begin() + svec.size()/2;

// initialize front with first half of svec: The elements up to but not including *mid

deque<string> front(svec.begin(), mid);

// initialize back with second half of svec: The elements *mid through end of svec

deque<string> back(mid, svec.end());

回顾一下指针,我们知道指针就是迭代器,因此允许通过使用内置数组中的 一对指针初始化容器也就不奇怪了

char *words[] = {"stately", "plump", "buck", "mulligan"};

// calculate how many elements in words

size_t words_size = sizeof(words)/sizeof(char *);

// use entire array to initialize words2

list<string> words2(words, words + words_size);

这里,使用 sizeof计算数组的长度。将数组长度加到指向第一 个元素的指针上就可以得到指向超出数组末端的下一位置的指针。通过指向第一个元素的指针 words 和指向数组中最后一个元素的下一位置的指针,实现了 words2 的初始化。其中第二个指针提供停止复制的条件,其所指向的位置上存放的元素并没有复制

随笔3- list array的更多相关文章

  1. 随笔记录--Array类型

    前言:除了Object类型之外,Array类型恐怕是ECMAScript中最常用的类型了.而且,ECMAScript中数组与其他多数语言中的数组有很大差别,ECMAScript数组中的每一项可以保存任 ...

  2. Swift3 - String 字符串、Array 数组、Dictionary 字典的使用

    Swift相关知识,本随笔为 字符串.数组.字典的简单使用,有理解.使用错误的地方望能指正. ///************************************************** ...

  3. 【跟着子迟品 underscore】Array Functions 相关源码拾遗 & 小结

    Why underscore 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. 阅读一些著名框架类库的源码,就好像和一个个大师对 ...

  4. 原生Ajax封装随笔

    XMLHttpRequest 对象用于和服务器交换数据.我们使用 XMLHttpRequest 对象的 open() 和 send() 方法: open(method,url,async) metho ...

  5. 【Android测试】【随笔】模拟双指点击

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5258660.html 手势 看到这个标题,很多人会想一想 ...

  6. Linux, Mac下Shell 数组 Array 的修理工

    我的测试基本都是在Mac,及Unix环境下测试的,如无特别注明,默认就是Mac 不论你看到这篇随笔是被shell array的奇淫巧技,还是发现shell array就在一对{}里面就可以做那么多勾当 ...

  7. [随笔]利用云虚拟机和学校VPN实现校外访问校内站点(反向代理)

    探究背景简介: 大学校内站点一般不对外开放,个人认为原因有二: 一是站点内容受众就是大学师生: 二是站点基本无防御措施,在公网环境下容易发生意外情况. 至于为何不对外开放,不是这篇随笔探讨的重点,利用 ...

  8. 关于Mybatis的一些随笔

    Mapper.xml头文件 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http:/ ...

  9. JavaScript 中Array数组的几个内置函数

    本文章内容均参考<JavaScript高级程序设计第三版> 今天在看JavaScript书籍的时候,看到之前没有了解过的JavaScript中Array的几个内置函数对象,为了之后再开发工 ...

随机推荐

  1. asp.net还原备份数据库(C#)

    因为做项目的时候用到对数据库的还原和备份,第一次接触,所以上网查了关于这方面的资料,网络果然是个好东西,该有的都有了,这里我就把原文中的代码直接粘贴过来了. using System; using S ...

  2. UIActionSheet的使用

    UIActionSheet是在iOS弹出的选择按钮项,可以添加多项,并为每项添加点击事件. 为了快速完成这例子,我们打开Xcode 4.3.2, 先建立一个single view applicatio ...

  3. ubuntu 下创建桌面快捷方式

    1)新建文件eclipse.desktop,命令如下: sudo vim /usr/share/applications/eclipse.desktop 2)在新建文件中添加如下内容并保存: [Des ...

  4. 用Firefox的debugger来调试JavaScript

    1.自我感觉比firebug更好用 https://developer.mozilla.org/zh-CN/docs/Tools/Debugger

  5. PATH变量

    PATH变量由系统管理员配置,通常包含如下一些存储系统程序的标准路径: /bin  二进制文件目录,用于存放启动系统时用到的路径 /usr/bin  用户二进制文件目录,用于存放用户使用的标准程序 / ...

  6. UIImageView变灰

    1.UIImageView圆角 CALayer *l = [cell.imgAvatarImage layer]; [l setMasksToBounds:YES]; [l setCornerRadi ...

  7. CentOS 7 为firewalld添加开放端口及相关资料

    1.运行.停止.禁用firewalld 启动:# systemctl start  firewalld 查看状态:# systemctl status firewalld 或者 firewall-cm ...

  8. LintCode Search For a Range (Binary Search)

    Binary Search模板: mid 和 target 指针比较,left/ right 和 target 比较. 循环终止条件: 最后剩两数比较(while(left + 1 < righ ...

  9. AngularJS之手动加载模块app和controller

    使用ng的页面中一般都是使用模块自动加载,页面的结构一般是这样的 加载angularjs脚本 加载业务代码脚本(或者写在script标签中) html结构代码(带有ng指令) 就像这样 app.htm ...

  10. Scrollview 嵌套 RecyclerView 及在Android 5.1版本滑动时 惯性消失问题

    标签:scrollview   android   滑动   嵌套 scrollview 嵌套recyclerview 时,recyclerview不显示,这就需要我们自己计算recyclerview ...