copy
指定從來源範圍的到目的範圍,逐一查看項目來源序列並將這些值的方向是往前項目值的新位置。
template<class InputIterator, class OutputIterator>
OutputIterator copy(
InputIterator _First,
InputIterator _Last,
OutputIterator _DestBeg
);
參數
_First
輸入迭代器,其在來源範圍定址第一個項目的位置。_Last
輸入定址的 Iterator 是一個可以在來源範圍的最後一個項目的位置。_DestBeg
輸出定址的 Iterator 第一個項目位置的範圍。
傳回值
輸出定址的 Iterator 是一個可以在目的範圍的最後一個項目,也就是說, Iterator 的位置處理 _Result +_Last – (_First )。
備註
來源範圍必須是有效的,而且必須在目的端有足夠的空間保留所有項目的複本。
因為演算法從第一個元素開始複製來源項目的順序,再將接下來可能與來源範圍重疊提供的來源範圍的 _Last 位置在目的範圍不包含。 除非沒有在來源和目的範圍,之間重疊copy 可用來將項目放置在左邊,而非右邊。 若要將右邊任意數目的位置,請使用 copy_backward 演算法。
copy 演算法只修改值指向 Iterator,指派新值給目的範圍的項目。 它不是用來建立新的項目,且不能直接將項目插入空的容器。
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 )
需求
標頭:<algorithm>
命名空間: std