目录(?)[+]

前面十二个算法所展现的都属于非变易算法(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. 函数指针和qsort函数

    1.函数指针的形式: 函数指针:int (*funcP) (int *a, int *b) 表示定义了一个funcP函数指针,指向了返回值为int类型,参数为int* 和int* 的函数 使用方式: ...

  2. Spring Security:Servlet 过滤器(三)

    3)Servlet 过滤器 Spring Security 过滤器链是一个非常复杂且灵活的引擎.Spring Security 的 Servlet 支持基于 Servlet 过滤器,因此通常首先了解过 ...

  3. 查找最小生成树:克鲁斯克尔算法(Kruskal)算法

    一.算法介绍 Kruskal算法是一种用来查找最小生成树的算法,由Joseph Kruskal在1956年发表.用来解决同样问题的还有Prim算法和Boruvka算法等.三种算法都是贪心算法的应用.和 ...

  4. 穿点最多的直线 牛客网 程序员面试金典 C++

    穿点最多的直线 牛客网 程序员面试金典 C++ 题目描述 在二维平面上,有一些点,请找出经过点数最多的那条线. 给定一个点集vectorp和点集的大小n,没有两个点的横坐标相等的情况,请返回一个vec ...

  5. CDP客户数据管理平台体系化搭建

    一.Cdp系统简介 1.基本概念 客户数据平台(Customer-Data-Platform),简称CDP:通过采集多方客户数据(主体与线索)等,从而进行精准的客户分析和人群细分,进而实现高效的客户维 ...

  6. 这些年我@yangbodong22011参与的开源

    2020年第一天,水一篇博客,对新年起码的尊重.这里记录下我参与的开源项目情况. Talk is cheap. Show me the code Linus Torvalds Jedis PR:htt ...

  7. Oracle的主要组件和基本概念

    oracle 简介 oracle(甲骨文)公司 1977年,三人合伙创办(Software Development Laboratories,SDL) 1979年,更名为Relational Soft ...

  8. 【浏览器】聊聊DOM

    [浏览器]聊聊DOM 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 作为前端开发,在以前的工作中大多是和DOM打交道,到 ...

  9. 谷粒 | 项目集成redis

    添加依赖 由于redis缓存是公共应用,所以我们把依赖与配置添加到了common模块下面,在common模块pom.xml下添加以下依赖 <!-- redis --> <depend ...

  10. 怎么将本地已有的一个项目上传到新建的git仓库的方法

    将本地已有的一个非git项目上传到新建的git仓库的方法一共有两种. 一. 克隆+拷贝 第一种方法比较简单,直接用把远程仓库拉到本地,然后再把自己本地的项目拷贝到仓库中去.然后push到远程仓库上去即 ...