해당 알고리즘은 <algorithm> 헤더파일에 정의되어 있다.
1. 사용 방법
1) remove
std::vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
vec.push_back(3);
vec.push_back(5);
result = std::remove(vec.begin(), vec.end(), 3);
위와 같이 정의했을 경우 vec은
[1, 2, 3, 4, 3, 5] -> [1, 2, 4, 5, 3, 5] // 3을 발견하면 왼쪽으로 한칸 shift, 또 3을 발견하면 해당값을 건너뛰어서 shift.
으로 변하게 된다. 그리고 3에 해당하는 이터레이터를 반환한다.
즉, 해당 값의 이터레이터부터 end에 해당하는 iterator까지를 지워주면 3에 해당하는 값을 모두 삭제할 수 있다.
vec.earse(std::remove(vec.begin(), vec.end(), 3), vec.end);
2) remove_if
template <typename Iter, typename Pred>
remove_if(Iter first, Iter last, Pred pred)
remove_if는 위와 같이 사용할 수 있다. pred에는 조건으로 사용할 함수 객체를 받는다. (함수 포인터를 받도록 할 수도 있다.)
struct is_odd {
bool operator()(const int& i) { return i % 2 == 1; }
};
위와 같이 함수 객체를 정의하고, 사용할 때 다음과 같이 사용하면 홀수에 해당하는 정보를 모두 삭제할 수 있다.
vec.erase(std::remove_if(vec.begin(), vec.end(), is_odd()), vec.end());
'프로그래밍 언어 > C++' 카테고리의 다른 글
STL 알고리즘 / find, find_if, any_of, all_of (0) | 2023.02.14 |
---|---|
STL 알고리즘 / transform 함수 (0) | 2023.02.14 |
STL 알고리즘 - 정렬(sort, stable_sort, partial_sort) (0) | 2023.02.14 |
STL 컨테이너 - set, multiset, map, multimap (0) | 2023.02.14 |
STL 컨테이너 - Deque (0) | 2023.02.14 |
댓글