더북(TheBook)

algorithm 헤더에 정의된 템플릿에 있는 remove() 알고리즘은 범위에서 지정한 값과 일치하는 원소들을 제거한다. 예를 들어보자.

std::vector<std::string> words { "one", "none", "some", "all", "none", "most", "many"};
auto iter = std::remove(std::begin(words), std::end(words), "none");

두 번째 문장은 remove()의 세 번째 인수 string("none)과 일치하는 모든 원소를 처음 두 인수로 지정된 범위에서 제거한다. 원소들을 제거한다는 표현이 약간의 오해를 일으킬 수도 있다. remove()는 전역 함수이므로 컨테이너의 원소들을 삭제할 수 없다. remove()가 원소들을 제거하는 방법은 문자열에서 공백을 제거하는 절차와 비슷하다. 세 번째 인수와 일치하는 원소들을 벡터 컨테이너 앞으로(오른쪽에서 왼쪽으로) 덮어쓰면서 복제하는 것이다. 그림 2-4는 이게 어떻게 동작하는지 보여준다.

▲ 그림 2-4 remove() 알고리즘이 동작하는 방식

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