C++ STL算法之:copy
前面十二个算法所展现的都属于非变易算法(Non-mutating algorithms)系列,现在我们来看看变易算法。所谓变易算法(Mutating algorithms)就是一组能够修改容器元素数据的模板函数,可进行序列数据的复制,变换等。
我们现在来看看第一个变易算法:元素复制算法copy。该算法主要用于容器之间元素的拷贝,即将迭代器区间[first,last)的元素复制到由复制目标result给定的区间[result,result+(last-first))中。下面我们来看看它的函数原型:
函数原形:
- template<class InputIterator, class OutputIterator>
- OutputIterator copy(
- InputIterator _First,
- InputIterator _Last,
- OutputIterator _DestBeg
- );
参数
- _First, _Last
- 指出被复制的元素的区间范围[ _First,_Last).
- _DestBeg
- 指出复制到的目标区间起始位置
返回值
返回一个迭代器,指出已被复制元素区间的最后一个位置
程序示例:
首先我们来一个简单的示例,定义一个简单的整形数组myints,将其所有元素复制到容器myvector中,并将数组向左移动一位。
- /*******************************************************************
- * Copyright (C) Jerry Jiang
- *
- * File Name : copy01.cpp
- * Author : Jerry Jiang
- * Create Time : 2012-3-20 22:44:28
- * Mail : jbiaojerry@gmail.com
- * Blog : http://blog.csdn.net/jerryjbiao
- *
- * Description : 简单的程序诠释C++ STL算法系列之十三
- * 变易算法 : 元素复制copy
- *
- ******************************************************************/
- #include <iostream>
- #include <algorithm>
- #include <vector>
- using namespace std;
- int main ()
- {
- int myints[] = {10, 20, 30, 40, 50, 60, 70};
- vector<int> myvector;
- vector<int>::iterator it;
- myvector.resize(7); // 为容器myvector分配空间
- //copy用法一:
- //将数组myints中的七个元素复制到myvector容器中
- copy ( myints, myints+7, myvector.begin() );
- cout << "myvector contains: ";
- for ( it = myvector.begin(); it != myvector.end(); ++it )
- {
- cout << " " << *it;
- }
- cout << endl;
- //copy用法二:
- //将数组myints中的元素向左移动一位
- copy(myints + 1, myints + 7, myints);
- cout << "myints contains: ";
- for ( size_t i = 0; i < 7; ++i )
- {
- cout << " " << myints[i];
- }
- cout << endl;
- return 0;
- }
从上例中我们看出copy算法可以很简单地将一个容器里面的元素复制至另一个目标容器中,上例中代码特别要注意一点就是myvector.resize(7);这行代码,在这里一定要先为vector分配空间,否则程序会崩,这是初学者经常犯的一个错误。其实copy函数最大的威力是结合标准输入输出迭代器的时候,我们通过下面这个示例就可以看出它的威力了。
- /*******************************************************************
- * Copyright (C) Jerry Jiang
- *
- * File Name : copy2.cpp
- * Author : Jerry Jiang
- * Create Time : 2012-3-20 23:25:29
- * Mail : jbiaojerry@gmail.com
- * Blog : http://blog.csdn.net/jerryjbiao
- *
- * Description : 简单的程序诠释C++ STL算法系列之十三
- * 变易算法 : 元素复制copy
- *
- ******************************************************************/
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #include <iterator>
- #include <string>
- using namespace std;
- int main ()
- {
- typedef vector<int> IntVector;
- typedef istream_iterator<int> IstreamItr;
- typedef ostream_iterator<int> OstreamItr;
- typedef back_insert_iterator< IntVector > BackInsItr;
- IntVector myvector;
- // 从标准输入设备读入整数
- // 直到输入的是非整型数据为止 请输入整数序列,按任意非数字键并回车结束输入
- cout << "Please input element:" << endl;
- copy(IstreamItr(cin), IstreamItr(), BackInsItr(myvector));
- //输出容器里的所有元素,元素之间用空格隔开
- cout << "Output : " << endl;
- copy(myvector.begin(), myvector.end(), OstreamItr(cout, " "));
- cout << endl;
- return 0;
- }
C++ STL算法之:copy的更多相关文章
- STL算法之函数copy
STL算法之copy copy(beg, end, dest) #include <iostream> #include <algorithm> #include <ve ...
- STL笔记(3) copy()之绝版应用
STL笔记(3) copy()之绝版应用 我选用了一个稍稍复杂一点的例子,它的大致功能是:从标准输入设备(一般是键盘)读入一些整型数据,然后对它们进行排序,最终将结果输出到标准输出设备(一般是显示器屏 ...
- STL算法
STL算法部分主要由头文 件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包含头文件<algorit ...
- 【STL源码学习】STL算法学习之二
第一章:前言 学习笔记,记录学习STL算法的一些个人所得,在以后想用的时候可以快速拾起. 第二章:明细 copy 函数原型: template <class InputIterator, cla ...
- 【转】三十分钟学会STL算法
转载自: http://net.pku.edu.cn/~yhf/UsingSTL.htm 这是本小人书.原名是<using stl>,不知道是谁写的.不过我倒觉得很有趣,所以化了两个晚上把 ...
- STL源代码分析——STL算法merge合并算法
前言 因为在前文的<STL算法剖析>中.源代码剖析许多.不方便学习.也不方便以后复习,这里把这些算法进行归类.对他们单独的源代码剖析进行解说.本文介绍的STL算法中的merge合并算法. ...
- STL源代码分析——STL算法sort排序算法
前言 因为在前文的<STL算法剖析>中,源代码剖析许多,不方便学习,也不方便以后复习.这里把这些算法进行归类,对他们单独的源代码剖析进行解说.本文介绍的STL算法中的sort排序算法,SG ...
- 变易算法 - STL算法
欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/mutating-algorithms.h ...
- C++11 STL算法简介
STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库.它被容纳于C++标准程序库(C++ Standard Library)中,是ANS ...
随机推荐
- 2020BUAA软工热身作业
2020BUAA软工热身作业 17373010 杜博玮 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 热身作业 我在这个课程的目标是 学习软件工 ...
- Noip模拟4(忁靈霁) 2021.6.6
T1 随(Rand) 由杠哥大定理可得,这题目前不可做,先跳走啦,咕咕.... T2 单(single) 考场上,简单看一眼就看出是个高斯消元,然后..... 板子没记住!!! 然而这不是最糟糕的.. ...
- 【做题记录】[NOI2008] 假面舞会—有向图上的环与最长链
luogu 1477 [NOI2008] 假面舞会 容易发现: 如果图中没有环,那么面具种数一定是所有联通块内最长链之和,最少为 \(3\) . 如果有环,则面具种数一定是所有环的大小的最大公约数. ...
- Spring Cloud Alibaba 使用Nacos作为配置管理中心
为什么需要配置中心? 动态配置管理是 Nacos 的三大功能之一,通过动态配置服务,我们可以在所有环境中以集中和动态的方式管理所有应用程序或服务的配置信息. 动态配置中心可以实现配置更新时无需重新部署 ...
- 印象最深的一个bug——排查修复问题事件BEX引发的谷歌浏览器闪退崩溃异常
前言 最近,我们部门负责项目运维的小王频频接到甲方的反馈,运行的项目使用谷歌浏览器登录后,每次点击处理2秒后,浏览器自动闪退崩溃.小王同学折腾了一个星期,还没找到问题的原因.甲方客户都把问题反馈给项目 ...
- 攻防世界 WEB 高手进阶区 csaw-ctf-2016-quals mfw Writeup
攻防世界 WEB 高手进阶区 csaw-ctf-2016-quals mfw Writeup 题目介绍 题目考点 PHP代码审计 git源码泄露 Writeup 进入题目,点击一番,发现可能出现git ...
- 二.什么是Promise
二.什么是Promise 1.理解 2.promise 的状态改变 3.promise的基本流程 4.promise的基本使用 1.理解 抽象表达: Promise 是JS 中进行异步编程的新的解决方 ...
- SpringCloud升级之路2020.0.x版-31. FeignClient 实现断路器以及线程隔离限流的思路
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 在前面一节,我们实现了 FeignClient 粘合 resilience4j 的 Ret ...
- 【JavaScript定时器小案例】常见的几种定时器实现的案例
[JavaScript定时器小案例]常见的几种定时器实现的案例 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 在日常开发 ...
- List<Object>
... package str; import java.util.ArrayList; import java.util.List; public class arrayText { public ...