copy_backward
소스 범위의 요소를 대상 범위에 할당하여 요소의 소스 시퀀스 전체에서 반복하고 역방향으로 새 위치를 할당합니다.
template<class BidirectionalIterator1, class BidirectionalIterator2>
BidirectionalIterator2 copy_backward(
BidirectionalIterator1 _First,
BidirectionalIterator1 _Last,
BidirectionalIterator2 _DestEnd
);
매개 변수
_First
소스 범위의 첫 번째 요소의 위치를 주소 지정하는 양방향 반복기입니다._Last
소스 범위에 있는 마지막 요소의 하나 다음 위치를 가리키는 양방향 반복기입니다._DestEnd
대상 범위에 있는 마지막 요소의 하나 다음 위치를 가리키는 양방향 반복기입니다.
반환 값
대상 범위에서 마지막 요소의 하나 다음 위치, 즉 반복기 주소를 가리키는 출력 반복기 _DestEnd – (_Last – _First ).
설명
소스 범위는 유효해야 하며 대상에서 복사할 모든 요소를 보관할 충분한 공간이 있어야 합니다.
이 copy_backward 알고리즘은 복사 알고리즘보다 요구 사항이 더 엄격합니다. 입력 및 출력 반복기가 모두 양방향입니다.
copy_backward 및 move_backward 알고리즘은 유일한 표준 템플릿 라이브러리 알고리즘 대상 범위의 끝 부분을 가리키는 반복기를 사용하여 출력 범위를 지정합니다.
왜냐하면 알고리즘은 지난 요소의 시작하는 주문의 소스 요소를 복사하고, 도착 범위는 도착 범위를 포함하지 않는 소스 범위의 _First 위치에 제공되는 소스 범위에 중복할 수 있습니다. copy_backward는 소스와 대상 범위가 겹치지 않는 한 왼쪽이 아닌 오른쪽으로 요소를 이동하는 데 사용할 수 있습니다. 여러 위치를 왼쪽으로 이동하려면, 복사 알고리즘을 사용합니다.
이 copy_backward 알고리즘은 반복기가 가리키는 값만 수정하며 대상 범위에 있는 요소에 새로운 값을 할당합니다. 새 요소를 만드는 데 사용할 수 없고 빈 컨테이너에 요소를 직접 삽입할 수 없습니다.
예제
// alg_copy_bkwd.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_backward the first 3 elements of v1 into the middle of v2
copy_backward( v1.begin( ), v1.begin( ) + 3, v2.begin( ) + 7 );
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 right
copy_backward( v2.begin( )+4, v2.begin( ) + 7, v2.begin( ) + 9 );
cout << "v2 with shifted insert = ( " ;
for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; ++Iter2 )
cout << *Iter2 << " ";
cout << ")" << endl;
}
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 6 9 0 10 0 10 20 27 30 )
요구 사항
헤더: <algorithm>
네임스페이스: std