C++ STL算法系列6---copy函数

简介: 现在我们来看看变易算法。所谓变易算法(Mutating algorithms)就是一组能够修改容器元素数据的模板函数,可进行序列数据的复制,变换等。 我们现在来看看第一个变易算法:元素复制算法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

img_e00999465d1c2c1b02df587a3ec9c13d.jpg
微信公众号: 猿人谷
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
如果您希望与我交流互动,欢迎关注微信公众号
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

目录
相关文章
|
15天前
|
机器学习/深度学习 安全 算法
【图论】【割点】【C++算法】928. 尽量减少恶意软件的传播 II
【图论】【割点】【C++算法】928. 尽量减少恶意软件的传播 II
|
17天前
|
存储 C++ 容器
C++STL(标准模板库)处理学习应用案例
【4月更文挑战第8天】使用C++ STL,通过`std:vector`存储整数数组 `{5, 3, 1, 4, 2}`,然后利用`std::sort`进行排序,输出排序后序列:`std:vector<int> numbers; numbers = {5, 3, 1, 4, 2}; std:sort(numbers.begin(), numbers.end()); for (int number : numbers) { std::cout << number << " "; }`
19 2
|
1天前
|
存储 搜索推荐 C++
【C++高阶(二)】熟悉STL中的map和set --了解KV模型和pair结构
【C++高阶(二)】熟悉STL中的map和set --了解KV模型和pair结构
|
1天前
|
设计模式 C语言 C++
【C++进阶(六)】STL大法--栈和队列深度剖析&优先级队列&适配器原理
【C++进阶(六)】STL大法--栈和队列深度剖析&优先级队列&适配器原理
|
1天前
|
存储 缓存 编译器
【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
|
1天前
|
算法 C++ 容器
【C++进阶(四)】STL大法--list深度剖析&list迭代器问题探讨
【C++进阶(四)】STL大法--list深度剖析&list迭代器问题探讨
|
1天前
|
编译器 C++
【C++进阶(三)】STL大法--vector迭代器失效&深浅拷贝问题剖析
【C++进阶(三)】STL大法--vector迭代器失效&深浅拷贝问题剖析
|
3天前
|
存储 算法 C语言
c++的学习之路:9、STL简介与string(1)
c++的学习之路:9、STL简介与string(1)
19 0
|
13天前
|
编译器 C语言 C++
【C++初阶(九)】C++模版(初阶)----函数模版与类模版
【C++初阶(九)】C++模版(初阶)----函数模版与类模版
18 0
|
13天前
|
存储 算法 C++
【C++初阶】STL详解(九) priority_queue的使用与模拟实现
【C++初阶】STL详解(九) priority_queue的使用与模拟实现
20 0

热门文章

最新文章