Skip to content
Posted on:July 19, 2005 at 07:38 AM

vector 내부 요소 제거하기

vector 내부 요소 제거하기

벡터에 값을 넣는 것은 쉬운 반면, 벡터 안에 있는 요소를 제거하는 것은 약간 까다롭다.
먼저 벡터가 제공하는 제거 관련 멤버함수는 다음의 3가지 이다.

erase() 어느 요소를 지울지 알아서, 그 특정요소만 지울 때
pop_back() 가장 나중의 요소를 지울 때
clear() 모든 요소를 지울 때

이 함수를 가지고 멍청하게 생각을 해보면 Brute-force하게 루프를 돌면서 원하는 요소를 얻는 단순한 방법을 할 텐데, 이렇게 하지 말고 잘 생각을 해보자.

STL에서 제공하는 알고리즘을 이용하면, 의외로 쉽게 해결된다.
remove_if() 알고리즘을 생각해보자.

알고리즘을 쓸려면 을 인클루드 해야한다.

remove_if 는 3개의 인자를 갖는다.

iterator _First 작업할 범위의 첫번째 요소
iterator _Last 작업할 범위의 마지막 요소
predicate _Pred 검사할 문장을 서술해 놓은 함수

서술문(Predicates)
Predicates는 Yes/No를 반환하는 함수 포인터 혹은 함수 그 자체를 말한다.

  • // remove all strings containing the value of
  • // szRemove from vector vs.
  •  
  • FindStr fs;
  •  
  • fs.iMode = FM_CONTAINS;
  • fs.szMatchStr = szRemove;
  • vs.erase(std::remove_if(vs.begin(), vs.end(), FindMatchingString(&fs)), vs.end());
  • 이렇게 지운다.