copy
Öğelerin değerlerini kaynak aralığından öğeleri kaynak sırası yineleme ve ileriye doğru bir yönde yeni konumlara atama bir hedef aralığı atar.
template<class InputIterator, class OutputIterator>
OutputIterator copy(
InputIterator _First,
InputIterator _Last,
OutputIterator _DestBeg
);
Parametreler
_First
Kaynak aralığındaki ilk öğenin konumunu adresleme giriş Yineleyici._Last
Bir kaynak aralığındaki son öğe geçmiş konum adresleme giriş Yineleyici._DestBeg
Hedef aralıkta ilk öğenin konumunu adresleme çıktı Yineleyici.
Dönüş Değeri
Hedef aralığın son öğesinde geçmiş yani biridir pozisyon adresleme çıktı Yineleyici, Yineleyici adresleri _Result + (_Last – _First ).
Notlar
Kaynak aralığı geçerli olmalı ve hedefte kopyalanan öğeleri saklamak için yeterli boş alan olmalıdır.
Sipariş başlayan ilk öğe, kaynak öğelerden algoritması kopyaladığı için kaynak aralığı sağlanan hedef aralık üstüste _Last hedef aralığında kaynak aralığını konumunu yer değil. copy sol ancak hakkı olmayan öğeleri kaymak için kaynak ve hedef aralıkları arasında örtüşme değilse kullanılabilir. Herhangi bir pozisyon sayısını sağa kaydırmak için copy_backward algoritması.
Copy algoritma yalnızca öğelerin hedef aralıktaki yeni değerler atayarak Yineleyicilerde göre sıralanmasını değerleri değiştirir. Yeni öğe oluşturmak için kullanılamaz ve öğeleri boş bir kapsayıcıya doğrudan ekleyemezsiniz.
copyiki ilişkili formlar:
Bu işlevler nasıl davranacağını hakkında bilgi için bkz: İşaretli Yineleyiciler.
Örnek
// 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;
}
Nasıl kopya kullanılacağını gösteren başka bir örnek için bkz: accumulate, copy, ve vector::push_back.
Çıktı
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 )
Gereksinimler
Başlık: <algorithm>
Namespace: std