remove_if는 C++ STL에서 제공하는 알고리즘 함수 중 하나로, 주어진 조건에 해당하는 요소를 컨테이너에서 제거하는 함수입니다.
remove_if 함수는 다음과 같은 형태로 선언됩니다.
template<class ForwardIt, class UnaryPredicate>
ForwardIt remove_if(ForwardIt first, ForwardIt last, UnaryPredicate p);
- ForwardIt : 컨테이너의 요소들을 가리키는 반복자 타입
- UnaryPredicate : 제거할 요소를 판별하는 조건 함수. 이 함수는 컨테이너의 요소를 받아 bool 값을 반환해야 합니다.
- first, last : 제거할 요소들을 담고 있는 범위를 나타내는 반복자. 이 범위는 [first, last) 로 지정합니다. 즉, first는 범위에 포함되고, last는 범위에 포함되지 않습니다.
remove_if 함수는 조건 함수 p가 true를 반환하는 요소들을 범위에서 제거하고, 남은 요소들을 앞쪽으로 모아서 컨테이너의 처음부터 채워나갑니다. 이때, 제거된 요소들은 범위의 끝쪽으로 이동하며 컨테이너에서는 완전히 제거되지 않습니다.
remove_if 함수의 반환값은 제거된 요소들 다음에 위치한 첫 번째 요소를 가리키는 반복자입니다. 이 반복자를 이용해 컨테이너에서 제거된 요소들을 실제로 삭제하는 작업을 수행할 수 있습니다.
remove_if 함수는 다양한 컨테이너에 대해 사용할 수 있습니다. 예를 들어, vector, deque, list, set, map 등 다양한 컨테이너에서 사용할 수 있습니다.
다음은 remove_if 함수를 사용한 예제 코드입니다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
auto is_even = [](int x) { return x % 2 == 0; };
auto new_end = remove_if(v.begin(), v.end(), is_even);
v.erase(new_end, v.end());
for (auto x : v) {
cout << x << " ";
}
cout << endl;
return 0;
}
위 코드에서는 vector를 이용해 1부터 10까지의 정수를 저장하고 있습니다. is_even 함수는 짝수인 경우 true를 반환하는 람다 함수로, remove_if 함수를 이용해 벡터에서 짝수를 제거합니다. 그리고 erase 함수를 이용해 벡터에서 실제로 제거된 요소들을 삭제합니다. 마지막으로, 벡터에 남은 요소들을 출력합니다.
위 예제 코드를 실행하면, 다음과 같이 출력됩니다.
1 3 5 7 9
위 출력 결과를 보면, 벡터에서 짝수인 요소들이 제거되어 남은 요소들만 출력되는 것을 확인할 수 있습니다.
'프로그래밍 > C++' 카테고리의 다른 글
C++ std::copy_if (0) | 2023.03.02 |
---|---|
C++ 쓰레드(thread) (2) | 2023.02.21 |
C++ transform (0) | 2023.02.18 |
C++ Functor(함수 객체) (2) | 2023.02.17 |
C++ std::sort (2) | 2023.01.04 |