map의 remove 함수와 달리 algorithm 헤더의 remove,remove_if는 완전히 데이터를 지우지 않는다.
따지자면 데이터를 지우는 것이 아닌 조건에 맞지 않는 데이터만 남긴다는 느낌이다.
게다가 데이터를 남기고 나머지 데이터는 지우는 것이 아니라 그대로 남긴다.
그래서 데이터를 목적에 맞게 제거하기 위해 erase와 연계한다.
Vector<int> v;
v.push_back(1);
v.push_back(4);
v.push_back(3);
v.push_back(5);
v.push_back(8);
v.push_back(2);
std::remove_if(v.begin(),v.end(),IsOdd());
위와 같이 벡터에 데이터를 집어 넣고 IsOdd라는 함수객체에 따라 데이터를 제거한다고 하자.
원래 벡터의 데이터가
1 4 3 5 8 2 에서
4 8 2 5 8 2 로 바뀐다.
벡터에서 홀수가 아닌 데이터는 4, 8, 2 뿐이므로 앞쪽에는 맞게 정렬되었지만 남은 데이터는 제거되지 않았다.
v.erase(remove_if(v.begin(),v.end(),IsOdd()),v.end());
그래서 위와 같이 erase를 함께 쓰면 4 8 2의 다음 지점부터 벡터 끝까지 데이터를 날려버린다.
'C++' 카테고리의 다른 글
| [C++] NULL은 int고 nullptr은 포인터다. (0) | 2022.06.25 |
|---|---|
| [C++] auto (0) | 2022.06.25 |
| [C++] 값 타입 변환 vs 참조 타입 변환 (0) | 2022.06.22 |
| [C++] new vs malloc (0) | 2022.06.22 |
| [C++] 초기화 리스트는 선처리 영역에서 실행된다. (0) | 2022.06.22 |