目录(?)[+]

前面十二个算法所展现的都属于非变易算法(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. 大厂面试题系列:重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分

    面试题:重载(Overload)和重写(Override)的区别.重载的方法能否根据返回类型进行区分 面试官考察点猜想 这道题纯粹只是考查基础理论知识,对实际开发工作中没有太多的指导意义,毕竟编辑器都 ...

  2. Spring源码解读(一):Spring的背景起源及框架整体介绍

    一.前言 Spring起源于2002年Rod Johnson写的一本书<Expert One-on-One J2EE>,书里介绍了Java企业应用程序开发情况,并指出Java EE和EJB ...

  3. jQuery根据地址获取经纬度

    一.HTML部分 1 @*景区位置*@ 2 <tr> 3 <th>景区名称:</th> 4 <td><input class="txt ...

  4. SPOJ GSS8 - Can you answer these queries VIII | 平衡树

    题目链接 这一道题的修改操作用平衡树都很容易实现,难处理的是询问操作. 要想解决询问操作,只要知道如何在平衡树上快速合并左右两个区间的答案即可. 设$Ans_{[l,r]}^k=\sum\limits ...

  5. hdu 1394 Minimum Inversion Number(线段树or树状数组)

    题意: 给你N个数,N个数是0~N-1的一个全排列. 要求统计它的所有形式的逆序对的最小值.它的所有形式的意思是,不断将数组开头的第一个数放到数组的最后面. 逆序对:i<j且ai>aj 思 ...

  6. linux 内核源代码情景分析——i386 的页式内存管理机制

    可以看出,在页面目录中共有210 = 1024个目录项,每个目录项指向一个页面表,而在每个页面表中又共有1024个页面描述项. 由图看出来,从线性地址到物理地址的映射过程为: 1)从CR3取得页面目录 ...

  7. BQ40Z50固件怎么升级?告诉你BQ系列芯片内部结构和升级方法

    一 BQ芯片初步认识 包括BQ40Z50在内,BQ系列电池管理芯片看起来是一个芯片,其实芯片里面封装了两个die.一个是MCU部分负责计算和控制,其采用的是bqBMP内核的16位处理器:另外一个die ...

  8. 【mysql2】下载安装mysql5.7版|不再更新系列

    一.下载MySQL 5.7 版 MySQL 5.7 版:官网下载地址 https://dev.mysql.com/downloads/windows/installer/5.7.html 下载的是50 ...

  9. p->next = q, p = q->next, q->next = p->next的区别

  10. 【SVG】为了前端页面的美丽,我选择学习SVG

    [SVG]为了前端页面的美丽,我选择学习SVG 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 SVG在之前自学的过程中, ...