|
라이손레종ㅎ 님이 쓰신 글 :
: 안녕하세요 ?
: 또 질문 드리네요^^;
: 여러 값중에서 제일 큰값을 찾아 리턴하는 함수가 있는지요 ?
:
: ex)
: -1 25 30 60 이중에서 큰값을 찾는 함수가 있는지요 ?
template <class T>
const T* Max(const T *beg, const T *end)
{
const T *mx = beg;
while(++beg<end){
if(*beg>*mx) mx = beg;
}
return mx;
}
template <class T, class Compare>
const T* Max(const T *beg, const T *end, Compare comp)
{
const T *mx = beg;
while(++beg<end){
if(comp(*beg,*mx)) mx = beg;
}
return mx;
}
첫번째 함수 사용예:
int nums[] = {2,6,5,2,8,11,0,4,7};
int maxval = *Max(nums,nums+sizeof(nums)/sizeof(nums[0]));
두번째 함수 사용예:
#include<functional>
int nums[] = {2,6,5,2,8,11,0,4,7};
int maxval = *Max(nums,nums+sizeof(nums)/sizeof(nums[0]),std::greater<int>());
숫자이거나 > 연산자가 오버로딩되어 있는 객체에는 첫번째 함수를 쓰는 게 간편하고
그렇지 않은 객체에는 두번째 함수를 씁니다.
그러하기 위해서는 비교함수객체를 만들어서 세번째 인자에 지정해주어야 합니다.
예를 들어, char 배열들에 담긴 문자열들 중 가장 큰 것을 찾기 위해서 두번째 함수를 사용할 수 있겠습니다.
#include<functional>
template <class T>
struct GreaterString : std::binary_function<T, T, bool> {
bool operator() (const T a, const T b) const
{
return (strcmp(a,b)>0);
}
};
char *strs[] = {"cde","abc","efg","bcd"};
char *pmax = *Max(strs,strs+sizeof(strs)/sizeof(strs[0]), GreaterString<char*>());
|