C++ STL std::copy 详解

2023-10-26


如果要把一个序列(sequence)拷贝到一个容器(container)中去,通常用std::copy算法,代码如下:

std::copy(start, end, std::back_inserter(container));
 这里,start和end是输入序列(假设有N个元素)的迭代器(iterator),container是一个容器,该容器的接口包含函数push_back。假设container开始是空的,那么copy完毕后它就包含N个元素,并且顺序与原来队列中的元素顺序一样。标准库提供的back_inserter模板函数很方便,因为它为container返回一个back_insert_iterator迭代器,这样,复制的元素都被追加到container的末尾了。 
现在假设container开始非空(例如:container必须在循环中反复被使用好几次)。那么,要达到原来的目标,必须先调用clear函数然后才能插入新序列。这会导致旧的元素对象被析构,新添加进来的被构造。不仅如此,container自身使用的动态内存也会被释放然后又创建,就像list,map,set的节点。某些vector的实现在调用clear的时候甚至会释放所有内存。
 
通常,考虑到在一个已有的元素上直接copy覆盖更高效。刻意这样做:
std::copy(start, end, container.begin());

 在这里你在container的头部执行了copy-over(覆盖赋值)操作,但是,如果container的大小小于输入序列的长度N的话,这段代码会导致崩溃(crash)。

eg1:
int a[3] = {1, 2, 3};
int b[3];
std::copy(a, a+3, b);
for(int j=0; j<3; j++)
	cout<< b[j] << endl;

eg2:
vector temp(3);
int a[3] = {1, 2, 3};
std::copy(a, a+3, &temp.front());
for(int j=0; j<3; j++)
	cout<< temp[j] << endl;

copy只负责复制,不负责申请空间,所以复制前必须有足够的空间


原文链接:http://blog.sina.com.cn/s/blog_8655aeca0100t6qe.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ STL std::copy 详解 的相关文章

随机推荐

  • 4G版本云音响设置教程阿里云平台版本

    4G版本云音响设置教程介绍 第一章 介绍了在阿里云物联网平台生一个设备使用的三元素 第二章 转换阿里云三元素 为MQTT参数 并下载到设备中 第三章 阿里云物联网套件协议使用说明 如何发送数据至设备并播放 本文目录引导 目录 4G版本云音响
  • egg-jwt的使用

    安装 npm install egg jwt save 配置 config config default js config jwt secret zidingyi 自定义 token 的加密条件字符串 config plugin js j
  • RPC答疑篇

    声明 本篇文章及代码仅供学习交流 严禁用于商业用途 否则由此产生的一切后果均与作者无关 上一篇的rpc发出来后 虽然我觉得我已经写得很细致了 但还是收到了很多私信说是跑不成功 所以再发 水 一篇 关于如何操作的文章 鉴于很多人没有某店的账号
  • Spring-Cloud-Alibaba之Dubbo

    在微服务构架中 不可避免的要遇到服务间的调用 目前的方式是通过RPC或者是rest的http接口调用 spring cloud中很多都使用的feign来做服务调用 在spring cloud alibaba的套装中我们使用dubbo来替换掉
  • 登录认证功能的统一拦截技术(拦截器)

    目录 1 说明 2 使用方法 1 定义拦截器 2 注册配置拦截器 3 示例 3 interceptor详细说明 1 拦截路径 2 执行流程 3 过滤器和拦截器的区别 4 登录校验的拦截器实现 5 全局异常处理 补充说明 1 说明 拦截器是一
  • Redis的三种模式——主从复制、哨兵、集群

    目录 一 Redis模式 二 Redis主从复制 2 1 主从复制概述 2 2 主从复制 2 3 Redis主从复制流程 2 4 搭建Redis主从复制 2 4 1 安装Redis 2 4 2 修改Master节点配置文件 192 168
  • 软件测试实战项目【电商、银行、商城、金融、医药、电商】

    最近 不少读者托我找一个能实际练手的测试项目 开始 我觉得这是很简单的一件事 但当我付诸行动时 却发现 要找到一个对新手友好的练手项目 着实困难 这是博主收集了很久才弄到的 希望可以帮助到你 由于项目太多了就不一一介绍了 只介绍这一个 电商
  • MySQL适合与不适合建索引的情况

    适合建索引情况 主键自动建立唯一索引 频繁作为查询条件的字段应该创建索引 查询中与其它表关联的字段 外键关系建立索引 Where条件里用不到的字段不创建索引 单键 组合索引的选择问题 在高并发下倾向创建组合索引 查询中排序的字段 排序字段若
  • 三个例题教会你二分法

    二分法 二分法 例题 数组查找 错误版本号 插入位置 二分法 先看一个很有意思的段子 有一天小明到图书馆借了 N 本书 出图书馆的时候 警报响了 于是保安把小明拦下 要检查一下哪本书没有登记出借 小明正准备把每一本书在报警器下过一下 以找出
  • 【毕设选题】深度学习人体语义分割在弹幕防遮挡上的实现 - python

    文章目录 1 课题背景 2 技术原理和方法 2 1基本原理 2 2 技术选型和方法 3 实例分割 4 实现效果 5 最后 1 前言 深度学习人体语义分割在弹幕防遮挡上的应用 学长这里给一个题目综合评分 每项满分5分 难度系数 3分 工作量
  • ad取消覆铜_【学院推荐】PCB工程师不得不看:超级实用AD常用快捷键总结

    快捷键的实用 极大的提高了大家工作中的效率 因此小编我特意帮大家搜集整理很多关于AD方面的常用快捷键 希望对大家有所帮助 一 PCB中常用快捷键 R L 输出PCB中所有网络的布线长度 Ctrl 左键点击 对正在布的线完成自动布线连接 M
  • python之word文档生成

    python之word文档生成 python docx官方文档 python docx操作word文档 python文件读取操作 excel文件操作 python docx官方文档 Document objects python docx
  • angular html原理,angular数据双向绑定的原理是什么?

    Angular是通过脏检测来进行双向数据绑定 所谓的双向绑定 无非是从界面的操作能实时反映到数据 数据的变更能实时展现到界面 angular数据双向绑定的原理 页面中每绑定一个数据或者事件时 就会向 watch队列中加入一条 watch 当
  • 几款Android 应用自动化测试工具

    简述 本文介绍几款流行的 Android应用自动化测试工具 Monkey测试 随机测试 压力测试 运行在模拟器或实际设备中 MonkeyRunner测试 操作简单 可录制测试脚本 可视化操作 主要生成坐标的自动化操作 移植性不强 Robot
  • keil编译问题error C100: unprintable character... 和WARNING L16: UNCALLED SEGMENT...

    keil编译出现问题如下 问题 error C100 unprintable character 0xA3 skipped 原因 keil里面出现了中文输入法时写的标点 程序中不能出现全角的任何字符 包括空格在内的任何标点符号和空格都只能在
  • ant design pro v5 - 03 动态菜单 动态路由(配置路由 动态登录路由 登录菜单)

    1 动态菜单 技术思路 配置路由 用户登录后根据用户信息获取后台菜单 2 动态路由 动态菜单 技术思路 使用umijs的运行时修改路由 patchRoutes routes UMIJS 参考文档 react umi 没有守护路由的功能 直接
  • 如何进行容器镜像加速?

    容器相比虚拟机最突出的特点之一便是轻量化和快速启动 相比虚拟机动辄十几个 G 的镜像 容器镜像只包含应用以及应用所需的依赖库 所以可以做到几百 M 甚至更少 但即便如此 几十秒的镜像拉取还是在所难免 如果镜像更大 则耗费时间更长 我们团队
  • python中MySQLdb的execute和executemany的使用

    如果使用executemany对数据进行批量插入的话 要注意一下事项 conn MySQLdb connect host localhost user root passwd password db myDB charset utf8 cu
  • UncaughtExceptionHandler

    61 常见的Exception Type 1 EXC BAD ACCESS 在开发过程中 总是会遇到各种Exception 在此总结一些常见的Exception NSInvalidArgumentException 错误类型 NSInval
  • C++ STL std::copy 详解

    如果要把一个序列 sequence 拷贝到一个容器 container 中去 通常用std copy算法 代码如下 std copy start end std back inserter container 这里 start和end是输入