目录(?)[+]

前面十二个算法所展现的都属于非变易算法(Non-mutating algorithms)系列,现在我们来看看变易算法。所谓变易算法(Mutating algorithms)就是一组能够修改容器元素数据的模板函数,可进行序列数据的复制,变换等。

我们现在来看看第一个变易算法:元素复制算法copy。该算法主要用于容器之间元素的拷贝,即将迭代器区间[first,last)的元素复制到由复制目标result给定的区间[result,result+(last-first))中。下面我们来看看它的函数原型:

函数原形:

[cpp] view
plain
 copy

  1. template<class InputIterator, class OutputIterator>
  2. OutputIterator copy(
  3. InputIterator _First,
  4. InputIterator _Last,
  5. OutputIterator _DestBeg
  6. );

参数

_First, _Last
指出被复制的元素的区间范围[ _First,_Last).
_DestBeg 
指出复制到的目标区间起始位置

返回值

返回一个迭代器,指出已被复制元素区间的最后一个位置

程序示例:

首先我们来一个简单的示例,定义一个简单的整形数组myints,将其所有元素复制到容器myvector中,并将数组向左移动一位。

[cpp] view
plain
 copy

  1. /*******************************************************************
  2. * Copyright (C) Jerry Jiang
  3. *
  4. * File Name   : copy01.cpp
  5. * Author      : Jerry Jiang
  6. * Create Time : 2012-3-20 22:44:28
  7. * Mail        : jbiaojerry@gmail.com
  8. * Blog        : http://blog.csdn.net/jerryjbiao
  9. *
  10. * Description :  简单的程序诠释C++ STL算法系列之十三
  11. *                变易算法 : 元素复制copy
  12. *
  13. ******************************************************************/
  14. #include <iostream>
  15. #include <algorithm>
  16. #include <vector>
  17. using namespace std;
  18. int main ()
  19. {
  20. int myints[] = {10, 20, 30, 40, 50, 60, 70};
  21. vector<int> myvector;
  22. vector<int>::iterator it;
  23. myvector.resize(7);   // 为容器myvector分配空间
  24. //copy用法一:
  25. //将数组myints中的七个元素复制到myvector容器中
  26. copy ( myints, myints+7, myvector.begin() );
  27. cout << "myvector contains: ";
  28. for ( it = myvector.begin();  it != myvector.end();  ++it )
  29. {
  30. cout << " " << *it;
  31. }
  32. cout << endl;
  33. //copy用法二:
  34. //将数组myints中的元素向左移动一位
  35. copy(myints + 1, myints + 7, myints);
  36. cout << "myints contains: ";
  37. for ( size_t i = 0; i < 7; ++i )
  38. {
  39. cout << " " << myints[i];
  40. }
  41. cout << endl;
  42. return 0;
  43. }

从上例中我们看出copy算法可以很简单地将一个容器里面的元素复制至另一个目标容器中,上例中代码特别要注意一点就是myvector.resize(7);这行代码,在这里一定要先为vector分配空间,否则程序会崩,这是初学者经常犯的一个错误。其实copy函数最大的威力是结合标准输入输出迭代器的时候,我们通过下面这个示例就可以看出它的威力了。

[cpp] view
plain
 copy

  1. /*******************************************************************
  2. * Copyright (C) Jerry Jiang
  3. *
  4. * File Name   : copy2.cpp
  5. * Author      : Jerry Jiang
  6. * Create Time : 2012-3-20 23:25:29
  7. * Mail        : jbiaojerry@gmail.com
  8. * Blog        : http://blog.csdn.net/jerryjbiao
  9. *
  10. * Description :  简单的程序诠释C++ STL算法系列之十三
  11. *                变易算法 : 元素复制copy
  12. *
  13. ******************************************************************/
  14. #include <iostream>
  15. #include <algorithm>
  16. #include <vector>
  17. #include <iterator>
  18. #include <string>
  19. using namespace std;
  20. int main ()
  21. {
  22. typedef vector<int> IntVector;
  23. typedef istream_iterator<int> IstreamItr;
  24. typedef ostream_iterator<int> OstreamItr;
  25. typedef back_insert_iterator< IntVector > BackInsItr;
  26. IntVector myvector;
  27. // 从标准输入设备读入整数
  28. // 直到输入的是非整型数据为止 请输入整数序列,按任意非数字键并回车结束输入
  29. cout << "Please input element:" << endl;
  30. copy(IstreamItr(cin), IstreamItr(), BackInsItr(myvector));
  31. //输出容器里的所有元素,元素之间用空格隔开
  32. cout << "Output : " << endl;
  33. copy(myvector.begin(), myvector.end(), OstreamItr(cout, " "));
  34. cout << endl;
  35. return 0;
  36. }
转自:   http://blog.csdn.net/jerryjbiao/article/details/7376088

C++ STL算法之:copy的更多相关文章

  1. STL算法之函数copy

    STL算法之copy copy(beg, end, dest) #include <iostream> #include <algorithm> #include <ve ...

  2. STL笔记(3) copy()之绝版应用

    STL笔记(3) copy()之绝版应用 我选用了一个稍稍复杂一点的例子,它的大致功能是:从标准输入设备(一般是键盘)读入一些整型数据,然后对它们进行排序,最终将结果输出到标准输出设备(一般是显示器屏 ...

  3. STL算法

    STL算法部分主要由头文 件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包含头文件<algorit ...

  4. 【STL源码学习】STL算法学习之二

    第一章:前言 学习笔记,记录学习STL算法的一些个人所得,在以后想用的时候可以快速拾起. 第二章:明细 copy 函数原型: template <class InputIterator, cla ...

  5. 【转】三十分钟学会STL算法

    转载自: http://net.pku.edu.cn/~yhf/UsingSTL.htm 这是本小人书.原名是<using stl>,不知道是谁写的.不过我倒觉得很有趣,所以化了两个晚上把 ...

  6. STL源代码分析——STL算法merge合并算法

    前言 因为在前文的<STL算法剖析>中.源代码剖析许多.不方便学习.也不方便以后复习,这里把这些算法进行归类.对他们单独的源代码剖析进行解说.本文介绍的STL算法中的merge合并算法. ...

  7. STL源代码分析——STL算法sort排序算法

    前言 因为在前文的<STL算法剖析>中,源代码剖析许多,不方便学习,也不方便以后复习.这里把这些算法进行归类,对他们单独的源代码剖析进行解说.本文介绍的STL算法中的sort排序算法,SG ...

  8. 变易算法 - STL算法

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/mutating-algorithms.h ...

  9. C++11 STL算法简介

    STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库.它被容纳于C++标准程序库(C++ Standard Library)中,是ANS ...

随机推荐

  1. jzoj6094

    题目描述 给定一个循环流(每个点均满足流量平衡条件),这个循环流有$n$个点,且每条边的流量只有 $1$ 或$ 2$,其中$a$条边流量为$1$,$b$条边流量为$2$,判断是否存在一个流满足上述条件 ...

  2. BZOJ4919[Lydsy1706月赛]大根堆-------------线段树进阶

    是不是每做道线段树进阶都要写个题解..根本不会写 Description 给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点.每个点有一个权值v_i. 你需要将这棵树转化成一个大根堆.确切 ...

  3. 链表中倒数第K个结点 牛客网 剑指Offer

    链表中倒数第K个结点 牛客网 剑指Offer 题目描述 输入一个链表,输出该链表中倒数第k个结点. # class ListNode: # def __init__(self, x): # self. ...

  4. poj 2724 Purifying Machine(二分图最大匹配)

    题意: 有2^N块奶酪,编号为00...0到11..1. 有一台机器,有N个开关.每个开关可以置0或置1,或者置*.但是规定N个开关中最多只能有一个开关置*. 一旦打开机器的开关,机器将根据N个开关的 ...

  5. hdu 2999 Stone Game, Why are you always there? (简单SG,有个优化)

    题意: 一排石头,个数是K. 有n个数,a1...an. 每人每次取石子只能取连续的x个.x属于a1...an的一个. 没法取者负. 思路: 简单的SG.但是TLE!后面加了一个优化~这个优化不好想到 ...

  6. 你说说RPC的一个请求的流程是怎么样的?

    前言 面试的时候经常被问到RPC相关的问题,例如:你说说RPC实现原理.让你实现一个RPC框架应该考虑哪些地方.RPC框架基础上发起一个请求是怎样一个流程等等.所以这次我就总结一波RPC的相关知识点, ...

  7. Red Hat Enterprise Linux (RHEL) 9 更新了什么,即 Rocky Linux 9 和 AlmaLinux 9 展望

    请访问原文链接:https://sysin.org/blog/rhel-9-vision/,查看最新版.原创作品,转载请保留出处. 作者:gc(at)sysin.org,主页:www.sysin.or ...

  8. 攻防世界 WEB 高手进阶区 XCTF 4th-CyberEarth ics-06 Writeup

    攻防世界 WEB 高手进阶区 XCTF 4th-CyberEarth ics-06 Writeup 题目介绍 题目考点 掌握暴力破解手段 Writeup 打开链接 http://220.249.52. ...

  9. webpack 之开发环境优化 source-map

    webpack 之开发环境优化 source-map /** * source-map:一种 提供源代码到构建后代码映射 技术 (如果构建后代码出错了,通过映射可以追踪源代码错误) * [inline ...

  10. Java 源码如何分析?

    如何阅读源码?万事开头难,源码从哪里开始看?我也是刚对源码的阅读研究不深,但是可以谈谈自己的源码阅读感受. 刚开始吧,只是对某些代码的实现原理感到好奇,好奇是怎么实现这种功能,实现这种效果的,对其背后 ...