copy
将源区的元素到目标范围,循环访问源元素序列并将它们分配在向前的方向值的新位置。
template<class InputIterator, class OutputIterator>
OutputIterator copy(
InputIterator _First,
InputIterator _Last,
OutputIterator _DestBeg
);
参数
_First
在源范围第一个元素的位置寻址的输入迭代器。_Last
处理是一个在源区超出的最终元素的位置。输入迭代器。_DestBeg
解决的第一个元素的输出位置的迭代器在目标范围。
返回值
处理是一个在值超出目标域,也就是说,迭代器的最终元素的输出位置的迭代器解决 _Result + (_Last - _First )。
备注
源范围必须是有效的,且必须具有足够的空间用于保存所有被复制的元素。
由于算法将从第一元素开始复制顺序的源元素,则目标范围重叠源区可以使用提供的源区的 _Last 位置在目标范围不包含。 除非不在源和目标之间的范围重叠,copy 可用于移动到元素的右侧,而不是。 若要移动右侧任意数量的位置,请使用 copy_backward 算法。
copy 只修改算法值指向由迭代器,为新值设置为在目标范围的元素。 它不能用于创建新的组件并不能直接插入元素为空的容器。
copy 有两个相关的窗体:
有关这些功能如何运行的信息,请参阅 经过检查的迭代器。
示例
// alg_copy.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
using namespace std;
vector <int> v1, v2;
vector <int>::iterator Iter1, Iter2;
int i;
for ( i = 0 ; i <= 5 ; i++ )
v1.push_back( 10 * i );
int ii;
for ( ii = 0 ; ii <= 10 ; ii++ )
v2.push_back( 3 * ii );
cout << "v1 = ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")" << endl;
cout << "v2 = ( " ;
for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
cout << *Iter2 << " ";
cout << ")" << endl;
// To copy the first 3 elements of v1 into the middle of v2
copy( v1.begin( ), v1.begin( ) + 3, v2.begin( ) + 4 );
cout << "v2 with v1 insert = ( " ;
for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
cout << *Iter2 << " ";
cout << ")" << endl;
// To shift the elements inserted into v2 two positions
// to the left
copy( v2.begin( )+4, v2.begin( ) + 7, v2.begin( ) + 2 );
cout << "v2 with shifted insert = ( " ;
for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
cout << *Iter2 << " ";
cout << ")" << endl;
}
有关另一个示例显示如何使用"复制,请参见 accumulate、copy 和 vector::push_back。
Output
v1 = ( 0 10 20 30 40 50 )
v2 = ( 0 3 6 9 12 15 18 21 24 27 30 )
v2 with v1 insert = ( 0 3 6 9 0 10 20 21 24 27 30 )
v2 with shifted insert = ( 0 3 0 10 20 10 20 21 24 27 30 )
要求
标头: <算法>
命名空间: std