zoukankan      html  css  js  c++  java
  • C++ STL算法系列6---copy函数

    现在我们来看看变易算法。所谓变易算法(Mutating algorithms)就是一组能够修改容器元素数据的模板函数,可进行序列数据的复制,变换等。

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

    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中,并将数组向左移动一位。

    复制代码
     1 #include <iostream>  
     2 #include <algorithm>  
     3 #include <vector>  
     4   
     5 using namespace std;  
     6   
     7 int main ()   
     8 {  
     9     int myints[] = {10, 20, 30, 40, 50, 60, 70};  
    10     vector<int> myvector;  
    11     vector<int>::iterator it;  
    12       
    13     myvector.resize(7);   // 为容器myvector分配空间  
    14       
    15     //copy用法一:  
    16     //将数组myints中的七个元素复制到myvector容器中  
    17     copy ( myints, myints+7, myvector.begin() );  
    18       
    19     cout << "myvector contains: ";  
    20     for ( it = myvector.begin();  it != myvector.end();  ++it )  
    21     {  
    22         cout << " " << *it;  
    23     }  
    24     cout << endl;  
    25   
    26     //copy用法二:  
    27     //将数组myints中的元素向左移动一位  
    28     copy(myints + 1, myints + 7, myints);  
    29   
    30     cout << "myints contains: ";  
    31     for ( size_t i = 0; i < 7; ++i )  
    32     {  
    33         cout << " " << myints[i];  
    34     }  
    35     cout << endl;  
    36   
    37     return 0;  
    38 }  
    复制代码

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

    复制代码
     1 #include <iostream>  
     2 #include <algorithm>  
     3 #include <vector>  
     4 #include <iterator>  
     5 #include <string>  
     6   
     7 using namespace std;  
     8   
     9 int main ()   
    10 {  
    11      typedef vector<int> IntVector;  
    12      typedef istream_iterator<int> IstreamItr;  
    13      typedef ostream_iterator<int> OstreamItr;  
    14      typedef back_insert_iterator< IntVector > BackInsItr;  
    15    
    16      IntVector myvector;  
    17   
    18      // 从标准输入设备读入整数  
    19      // 直到输入的是非整型数据为止 请输入整数序列,按任意非数字键并回车结束输入  
    20      cout << "Please input element:" << endl;  
    21      copy(IstreamItr(cin), IstreamItr(), BackInsItr(myvector));  
    22   
    23      //输出容器里的所有元素,元素之间用空格隔开  
    24      cout << "Output : " << endl;  
    25      copy(myvector.begin(), myvector.end(), OstreamItr(cout, " "));   
    26      cout << endl;  
    27   
    28     return 0;  
    29 }  
    复制代码

    来源:http://blog.csdn.net/jerryjbiao/article/details/7376088

  • 相关阅读:
    [ASP.NET][实例]用户控件的设计与使用
    构造器[java、C#]
    [转]clob和blob两个字段什么分别?
    C#的反射机制调用方法
    C# WinForm 控件美化之改变ListView Head 的背景色
    C# 创建快捷方式
    Copy Html To Clipboard
    改善C#程序的建议在线程同步中使用信号量
    Paste html from Clipboard
    Winform部署mshtml程序集出错的一个解决方案
  • 原文地址:https://www.cnblogs.com/mfryf/p/10814743.html
Copyright © 2011-2022 走看看