더북(TheBook)

2.3.6 원소를 삭제하기

앞에서 얘기한 것처럼 컨테이너 객체의 함수 멤버만 컨테이너의 원소들을 삭제할 수 있다. clear() 멤버를 호출해서 vector 객체에서 원소들을 모두 제거할 수도 있다.

std::vector<int> data(100, 99); // 100개의 원소를 99로 초기화
data.clear();                   // 모든 원소를 제거

첫 번째 문장은 int 타입으로 원소 100개를 갖는 vector를 생성했으므로 size100이고, capacity100이다. 모든 원소는 99로 초기화되었다. 두 번째 문장은 원소들을 모두 제거하므로 size0이 된다. 그렇지만 capacity는 변경되지 않으므로 여전히 100이다.

pop_back() 함수를 호출해서 vector 객체의 마지막 원소를 삭제할 수 있다.

std::swap(std::begin(data)+1, std::end(data)-1); // 두 번째와 마지막 원소를 교환한다
data.pop_back();                                 // 마지막 원소를 제거한다

두 번째 문장은 마지막 원소를 제거하므로 datasize99가 되지만, capacity100이 유지된다.

원소들의 순서에 신경 쓰지 않아도 된다면 원소들을 모두 이동하지 않아도 마지막 원소를 삭제하는 방법으로 원하는 원소를 제거할 수 있다. 벡터 data에서 두 번째 원소를 삭제하고 싶다고 하자. 그렇다면 이런 방법으로 할 수 있다.

std::swap(std::begin(data)+1, std::end(data)-1); // 두 번째와 마지막 원소를 교환한다
data.pop_back();                                 // 마지막 원소를 제거한다

첫 번째 문장은 algorithm 헤더나 utility 헤더에 정의된 swap() 템플릿 함수를 호출한다. 이 문장은 두 번째 원소와 마지막 원소를 교환한다. pop_back()을 호출해 두 번째 원소였던 마지막 원소를 제거하고, 결과적으로 컨테이너에서 소거된다.

Note ≣

vector 컨테이너에는 swap() 함수 멤버가 있다. swap()은 함수가 호출된 컨테이너의 원소와 인수로 전달된 벡터 컨테이너의 원소를 교환할 것이다. 두 벡터 컨테이너는 같은 타입의 원소를 저장하고 있어야 한다. 전역 함수 swap()도 인수로 전달된 두 벡터 컨테이너의 원소를 교환할 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.