참고할만한 부분은 _if로 끝나는 함수들만 매개변수(조건자)로 넘길 수 있다는 점, sort 함수 예외.
참고 사이트 : https://en.cppreference.com/w/cpp/algorithm
#include <iostream>
#include <algorithm>
#include <utility>
#include <vector>
#include <queue>
using namespace std;
bool Is_one(int _val)
{
return _val == 1;
}
class Test
{
public:
bool operator()(int i)
{
return i % 4 == 0;
}
};
struct s_test
{
public:
bool operator()(int i)
{
return i % 2 == 0;
}
};
int main()
{
// 파라미터 _Pr _Pred > 조건자 (Predicate)
// 조건 : bool 반환형인 함수 또는 구조체/클래스 함수 객체
// ------- find_if -------
cout << "find_if 테스트" << endl;
// 배열 테스트
int arr[]{ 1,4,6,3,2,4,2,3,4,5 };
auto iter = find_if(arr, arr + 10, Is_one);
if (iter != arr + 10)
cout << *iter << endl;
// ------- count_if -------
cout << "\ncount_if 테스트" << endl;
// 벡터 테스트
vector<int> v{1,2,3,4,5,6,7,8,9,10,11,12};
int count_div3 = count_if(v.begin(), v.end(), [](int i) { return i % 3 == 0; });
cout << "3랑 나눌 수 있는 값 : " << count_div3 << "개\n";
// 클래스 함수 객체
int count_div4 = count_if(v.begin(), v.end(), Test());
cout << "4랑 나눌 수 있는 값 : " << count_div4 << "개\n";
// 구조체 함수 객체
int count_div2 = count_if(v.begin(), v.end(), s_test());
cout << "2랑 나눌 수 있는 값 : " << count_div2 << "개\n";
// ------- count_if -------
cout << "\ncount_if 테스트" << endl;
// 람다
vector<int> v2;
copy_if(v.begin(), v.end(), back_inserter(v2), [](int i) { return i % 3 == 0; });
for (auto item : v2)
cout << "v2 값 : " << item << endl;
// ------- remove_if -------
cout << "\nremove_if 테스트" << endl;
// 6을 제거
v2.erase(remove_if(v2.begin(), v2.end(), [](int i) { return i % 2 == 0; }));
// 12을 제거
v2.erase(remove_if(v2.begin(), v2.end(), [](int i) { return i % 2 == 0; }));
for (auto item : v2)
cout << "v2 값 : " << item << endl;
// ------- replace_if -------
cout << "\nreplace_if 테스트" << endl;
// 3을 1로 바꿈
replace_if(v2.begin(), v2.end(), [](int i) { return i == 3; }, 1);
for (auto item : v2)
cout << "v2 값 : " << item << endl;
}
'프로그래밍 언어 > C++' 카테고리의 다른 글
RAII (Resource Acquisition Is Initialization) (0) | 2022.06.29 |
---|---|
C++ virtual 다중 상속, 가상 부모 클래스 (0) | 2022.06.23 |
C++ 구조적 바인딩 (Structured Bindings) (0) | 2022.06.21 |
C++ STL 설명과 for-range 기반 loop (0) | 2022.06.21 |
C++ 예외 처리용 throw(), noexcept() (0) | 2022.06.16 |