algorithm_copy_backward
algorithm_copy_backward (역방향 복사)
std::copy_backward는 소스 범위 [first, last)의 요소들을 역순으로 복사해서 d_last에서 끝나는 목적지 범위에 넣어요. 오른쪽 방향으로 복사할 때 (겹치는 범위 처리) 적합한 함수예요.
출처: cppreference
본문
std::copy_backward는 소스 범위 [first, last)의 요소들을 d_last에서 끝나는 목적지 범위로, last에서 시작해 first까지 역순으로 복사해요. <algorithm> 헤더에 정의되어 있어요.
template< class BidirIt1, class BidirIt2 >
BidirIt2 copy_backward( BidirIt1 first, BidirIt1 last, BidirIt2 d_last );
반환값 (Return value)
목적지 범위에서 마지막으로 복사 배정된 요소를 가리키는 반복자예요. 복사된 요소가 없으면 d_last를 돌려줘요.
복잡도 (Complexity)
정확히 std::distance(first, last)번의 배정이 필요해요.
참고 (Notes)
겹치는 범위를 복사할 때, 왼쪽으로 복사(목적지 범위의 시작이 소스 범위 밖)면 std::copy가 적합하고, 오른쪽으로 복사(목적지 범위의 끝이 소스 범위 밖)면 std::copy_backward가 적합해요.
예제 (Example)
#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>
int main()
{
std::vector<int> source(4);
std::iota(source.begin(), source.end(), 1); // fills with 1, 2, 3, 4
std::vector<int> destination(6);
std::copy_backward(source.begin(), source.end(), destination.end());
std::cout << "destination contains: ";
for (auto i: destination)
std::cout << i << ' ';
std::cout << '\n';
}
출력:
destination contains: 0 0 1 2 3 4
가능한 구현 (Possible implementation)
template<class BidirIt1, class BidirIt2>
BidirIt2 copy_backward(BidirIt1 first, BidirIt1 last, BidirIt2 d_last)
{
while (first != last)
*(--d_last) = *(--last);
return d_last;
}