copy函数

原创 2015年11月20日 10:24:28

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

     template<class InputIterator, class OutputIterator>  
        OutputIterator copy(  
           InputIterator _First,   
           InputIterator _Last,   
           OutputIterator _DestBeg  
       );

参数

_First, _Last
指出被复制的元素的区间范围[ _First,_Last).
_DestBeg 
指出复制到的目标区间起始位置

返回值

返回一个迭代器,指出已被复制元素区间的最后一个位置

下面来看个例子:

#include <iostream>  
#include <algorithm>  
#include <vector>  

using namespace std;

int main()
{
	int myints[] = { 10, 20, 30, 40, 50, 60, 70 };
	vector<int> myvector;
	vector<int>::iterator it;

	myvector.resize(7);   // 为容器myvector分配空间  

	//copy用法一:  
	//将数组myints中的七个元素复制到myvector容器中  
	copy(myints, myints + 7, myvector.begin());

	cout << "myvector contains: ";
	for (it = myvector.begin(); it != myvector.end(); ++it)
	{
		cout << " " << *it;
	}
	cout << endl;

	//copy用法二:  
	//将数组myints中的元素向左移动一位  
	copy(myints + 1, myints + 7, myints);

	cout << "myints contains: ";
	for (size_t i = 0; i < 7; ++i)
	{
		cout << " " << myints[i];
	}
	cout << endl;

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

using namespace std;

int main()
{
	typedef vector<int> IntVector;
	typedef istream_iterator<int> IstreamItr;
	typedef ostream_iterator<int> OstreamItr;
	typedef back_insert_iterator< IntVector > BackInsItr;

	IntVector myvector;

	// 从标准输入设备读入整数  
	// 直到输入的是非整型数据为止 请输入整数序列,按任意非数字键并回车结束输入  
	cout << "Please input element:" << endl;
	copy(IstreamItr(cin), IstreamItr(), BackInsItr(myvector));

	//输出容器里的所有元素,元素之间用空格隔开  
	cout << "Output : " << endl;
	copy(myvector.begin(), myvector.end(), OstreamItr(cout, " "));
	cout << endl;

	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

图解__arch_copy_from_user函数

  • 2013年01月08日 16:10
  • 307KB
  • 下载

进程创建之copy_process函数

copy_process函数在进程创建的do_fork函数中调用,主要完成进程数据结构,各种资源的初始化。初始化方式可以重新分配,也可以共享父进程资源,主要根据传入CLONE参数来确定。 /* *...
  • bullbat
  • bullbat
  • 2011年12月20日 17:07
  • 4288

拷贝构造函数(copy constuctor)

拷贝构造函数(copy constuctor) 通常C++初级程序员会认为当一个类为没有定义拷贝构造函数的时候,编译器会 为其合成一个,答案是否定的。编译器只有在必要的时候在合成拷贝构造函数。 ...

av_image_copy函数原型的深入探秘

在使用ffmpeg进行数据处理的时候经常遇到一些函数总想知道是怎么实现的 av_image_copy这个经常看到 于是找到原型 //数据拷贝 void av_image_copy(ui...

Linux-0.11内核源码分析系列:内存管理copy_page_tables()函数分析

/* *Author : DavidLin *Date : 2014-11-22pm *Email : linpeng1577@163.com or linpeng1577@g...

C++学习——copy构造函数及浅拷贝和深拷贝

作为面向对象语言,类的使用必不可少,构造参数自然也就无可避免。下面总结一下C++中的copy构造函数,在这之前需要了解浅拷贝和深拷贝的区别。 浅拷贝和深拷贝的区别 所谓浅拷贝只是将一个变量所存储的内容...

拷贝构造函数(Copy Constructor)

Question1-拷贝构造是用来做什么的? 参考构造函数在导出对象时使用,拷贝构造函数在我们对对象进行类似”copy“操作时使用(好像是废话),这里说的“类似copy的操作”,主要包括以下...

LINUX之 Copy_from_user函数详细分析

来自http://hi.baidu.com/wzt85/blog/item/1f29731ba4b317ffae513316.html copy_from_user函数的目的是从用户空间拷贝数据到内...
  • jhyBOSS
  • jhyBOSS
  • 2017年07月31日 14:43
  • 150

随笔1:为什么copy函数需要定义中间指针get

1、先看代码 2、原因解决方法

STL源码剖析——全局函数construct(),destroy(),uninitialized_copy(),uninitialized_fill(),uninitialized_fill_n()

前言 在
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:copy函数
举报原因:
原因补充:

(最多只允许输入30个字)