반응형
- C++ 에서 컨테이너 구현 방식으로 class 외에도 함수 포인터 방식이 존재한다.
- count, count_if 를 통해 list 중 find 하는 기능을 함수로 제공한다.
- count_if 의 경우 컨테이너를 3번째 인자로 전달한다.
- equal 의 경우 template 함수, 함수 포인터, template 함수 객체화 하여 전달하는 방식을 제공한다.
하여, 위의 내용들을 활용하여 C++ 로 구현을 해보겠다.
그럼 바로 소스를 통해 알아가 보도록 하자. 아래는 필자가 직접 구현한 소스이다.
#include <iostream>
#include <vector>
//#include <assert.h>
#include <algorithm>
using namespace std;
bool(*pCompare)(int, int);
template <typename T>
bool Compare(T nVal1)
{
if (nVal1 < 10)
return true;
else
return false;
}
template <typename T, typename T2>
bool Compare2(T nVal1, T2 nVal2)
{
if (nVal1 < nVal2)
return true;
else
return false;
}
template <typename T, typename T2>
class CCompare
{
public:
bool operator ()(T nVal1, T2 nVal2)
{
if (nVal1 < nVal2)
return true;
else
return false;
}
};
int main()
{
int nSize = 5;
int vecMaxSize = 5;
bool bCount = false;
bool bEqual = false;
int nFind = 3;
int nCountResult = 0;
vector<int> vecData;
vector<int> vecSecond(vecMaxSize, 6);
vecData.resize(nSize);
vecData[0] = 1;
vecData[1] = 2;
vecData[2] = 3;
vecData[3] = 4;
vecData[4] = 5;
//1. count
nCountResult = count(vecData.begin(), vecData.end(), nFind);
cout << nFind << "의 갯수는" << nCountResult << " 개 입니다." << endl;
//2. count_if
bCount = count_if(vecData.begin(), vecData.end(), Compare<int>);
cout << "count_if 비교결과 " << bCount << " 입니다." << endl;
//3. equal
//bEqual = equal(vecData.begin(), vecData.end(), vecSecond.begin(), Compare2<int, int>); // template 함수 사용조건
//pCompare = Compare2;
//bEqual = equal(vecData.begin(), vecData.end(), vecSecond.begin(), pCompare); // 함수 포인터 사용 조건
//CCompare<int, int> cmp;
bEqual = equal(vecData.begin(), vecData.end(), vecSecond.begin(), CCompare<int, int>()); // 함수 객체 사용 조건
cout << "equal 비교결과 " << bEqual << " 입니다." << endl;
getchar();
return 1;
}반응형
'C++' 카테고리의 다른 글
| [C++] map, pair 컨테이너 구현 (0) | 2022.02.20 |
|---|---|
| [C++] pair, multimap, adjacent_find 구현 (0) | 2022.02.20 |
| [C++] Compare 컨테이너 구현(vector 활용) (0) | 2022.02.20 |
| [C++] 동적 바인딩 과 정적 바인딩 (0) | 2022.02.14 |
| [C++] MFC 기반의 유저 PC 접속 응용프로그램 만들기 (0) | 2021.03.20 |