目录(?)[+]

前面十二个算法所展现的都属于非变易算法(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. Noip模拟18 2021.7.17 (文化课专场)

    T1 导弹袭击(数学) 显然,我们要找到最优的A,B使得一组a,b优于其他组那么可以列出: $\frac{A}{a_i}+\frac{B}{b_i}<\frac{A}{a_j}+\frac{B} ...

  2. csp-s 2021

    T1 廊桥分配 当一架飞机抵达机场时,可以停靠在航站楼旁的廊桥,也可以停靠在位于机场边缘的远机位. 乘客一般更期待停靠在廊桥,因为这样省去了坐摆渡车前往航站楼的周折. 然而,因为廊桥的数量有限,所以这 ...

  3. 嵌入式开发板nfs挂载

    板子要开始调试了,第一个头大的问题就是调试过程中更新的文件怎么更新到板子上,以前用sd卡拷贝来来回回太浪费时间了,adb也需要接线各种连接操作. 现在板子有wifi可用,是时候把nfs共享搭起来了. ...

  4. Ubuntu mysql安装与使用

    Ubuntu 下安装 mysql 运行下面的shell代码 #安装mysql sudo apt-get -y install mysql-server sudo apt-get -y install ...

  5. Python NameError: name 'unicode' is not defined

    Python2 的unicode 函数在 Python3 中被命名为 str.在 Python3 中使用 ·str 来代替 Python2 中的 unicode.

  6. 2021CCPC华为云挑战赛 部分题题解

    CDN流量调度问题 题看了没多久就看出来是\(DP\)的题,然后就设了状态\(f[i][j]\)表示到前\(i\)个点时已经用了\(j\)个节点的最小总代价,结果发现转移时\(O(nm^2)\),但这 ...

  7. cf2A Winner(implementation)

    题意: N个回合. 每个回合:name score[名为name的这个人得了score分(可负可正)]. 问最后谁的累积分数是最高的.设为M.如果有好几个都得了M,找出这几个人中哪个最早回合累积分数超 ...

  8. Qt Creator打造VScode one dark pro主题配色

    1.缘由 我之前习惯使用 vscode 进行开发,对 vscode 的 one dark pro 主题情有独钟.无奈公司需要使用 Qt Creator 进行日常开发,只能暂时舍弃 vscode,采用曲 ...

  9. Android现有工程使用Compose

    Android现有工程使用Compose 看了Compose的示例工程后,我们也想使用Compose.基于目前情况,在现有工程基础上添加Compose功能. 引入Compose 首先我们安装 Andr ...

  10. ELK集群之metricbeat(9)

    Metricbeat包的安装及简单使用 Metricbeat包的安装及简单使用 系统数据采集 Python -> ES -> Grafana metricbeat的安装 metricbea ...