copy_backward
copy_backward (뒤에서부터 복사)
소스 범위의 원소를 목적지 범위의 끝에 맞춰 뒤에서부터 복사하는 알고리즘이에요. 범위가 겹칠 때 유용해요. <algorithm> 헤더에 있어요.
출처: cppreference
본문
copy_backward는 소스 범위 [first, last)의 원소를 d_last로 끝나는 목적지 범위에 복사해요. 복사는 last부터 시작해 first 쪽으로 역순으로 진행돼요.
template< class BidirIt1, class BidirIt2 >
BidirIt2 copy_backward( BidirIt1 first, BidirIt1 last, BidirIt2 d_last );
d_last가 (first, last] 안에 있으면 동작이 미정의예요. 즉 목적지 끝이 소스 범위 안에 걸치면 안 돼요.
- 매개변수:
first,last(소스 범위),d_last(목적지 범위의 끝-지난 반복자). - 반환 값: 목적지 범위에서 마지막으로 복사된 원소를 가리키는 반복자. 복사된 원소가 없으면
d_last. - 복잡도:
last - first에 정확히 비례.
전형적인 용도는 배열/벡터 안에서 요소를 오른쪽으로 밀 때예요. 예를 들어 {1,2,3,4}에서 마지막 두 요소를 오른쪽으로 한 칸 옮기고 싶다면, 앞에서부터 복사하면 값을 덮어써서 문제가 돼요. 뒤에서부터 복사하면 안전해요.
copy(앞→뒤)와 정확히 대칭인 연산이에요. 겹치는 범위를 오른쪽으로 이동시킬 때 copy_backward를 쓰면 됩니다.