다음을 통해 공유


copy

요소 값을 통해 소스 시퀀스의 요소를 반복 하 고 새 위치를 앞쪽에서으로 배정 대상 범위에서 원본 범위에서 할당 합니다.

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

매개 변수

  • _First
    원본 범위의 위치를 첫 번째 요소의 주소를 지정 하는 입력된 반복기입니다.

  • _Last
    입력된 반복기 주소 위치 한 원본 범위의 마지막 요소입니다.

  • _DestBeg
    출력 반복기 대상 범위의 위치를 첫 번째 요소의 주소를 지정 합니다.

반환 값

출력 반복기 한 대상 범위의 마지막 요소입니다 위치 주소 지정, 반복기 주소 _Result + (_Last - _First ).

설명

원본 범위에서 유효 해야 하며 대상에 복사 하 고 모든 요소를 보유할 수 있는 충분 한 공간이 있어야 합니다.

알고리즘 소스 요소 순서는 첫 번째 요소부터 복사 하기 때문에 대상 범위 제공 원본 범위와 겹칠 수는 _Last 원본 범위의 위치를 대상 범위에 포함 되어 없습니다.복사 요소가 있지만 오른쪽에서 왼쪽으로 이동 하려면 소스와 대상 범위가 겹치지 않습니다 하지 않는 한 사용할 수 있습니다.사용 위치에서 원하는 만큼 오른쪽으로 이동 하는 copy_backward 알고리즘.

복사 알고리즘을 새 값을 할당 하 여 요소 대상 범위에는 반복기가 가리키는 값만 수정 합니다.새 요소를 만드는 데 사용할 수 없습니다 하 고 요소는 빈 컨테이너에 직접 삽입할 수 없습니다.

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

참고 항목

참조

표준 템플릿 라이브러리