어떤 vector가 있다고 할때 push_back, insert 나 범위 생성자로 vector의 할당된 용량이 늘어나 버렸다면 erase 등을 호출 하여 데이타를 삭제한다고 해도 이미 할당된 용량이 줄어들지는 않는다.
이런 경우
vector<Object>(v).swap(v);
코드가 처리되는 방식은
- 복사생성자 에 의해 딱맞는 크기를 갖는 vector<Object> 임시객체가 v를 복사해서 생성
- swap() 에 의해서 백터의 데이타가 뒤바뀜
- 코드가 끝나면서 임시객체 소멸
- v는 타이트 해짐
또한 swap는 컨테이너를 완전히 비우고 용량을 라이브러리 구현코드가 허용하는 최소치로 줄이는 데에도 쓸 수 있다.
vector<Object> v;
string s;
…
vector<Obect>().swap(v);
string().swap(s);
swap을 일반적으로 서로다른 컨테이너끼리 사용할 경우에 swap 일어난 후에도 원래의 컨테이너의 요소를 가르키는데 사용되던 모든 반복자나 포인터, 참조나는 다른 컨테이너로 옮겨간 이후에도 그대로 유지된다고 한다.(뭔소린지 -_-)