deque::swap
deque::swap (내용 교환)
두 deque의 내용을 서로 바꾸는 멤버 함수예요. 개별 요소에 이동·복사·스왑을 호출하지 않아요.
출처: cppreference
본문
swap()은 컨테이너의 내용을 other와 교환해요.
void swap( deque& other ); // (until C++17)
void swap( deque& other ) noexcept(/* see below */); // (since C++17)
개별 요소에 대한 이동·복사·스왑을 호출하지 않아요. 내부 데이터 구조의 포인터만 교환하는 셈이라 상수 시간에 가까워요.
- 모든 반복자와 참조는 유효하게 유지되고,
end()반복자는 무효화돼요. - 할당자 관련:
propagate_on_container_swap::value가true면 할당자도 교환되고, 아니면 교환되지 않아요.
std::deque<int> a{1, 2, 3};
std::deque<int> b{9, 8};
a.swap(b);
// a == {9,8}, b == {1,2,3}
자유 함수 std::swap(a, b)도 내부적으로 멤버 swap을 호출해요. 요소 수가 많아도 포인터 교환만 하므로 swap이 매우 저렴하다는 점이 vector와 같은 장점이에요.