C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[63547] Re:[질문] 여러 값중 제일 큰값을 리턴하는 함수는?
이현수 [] 1995 읽음    2011-01-21 13:47
라이손레종ㅎ 님이 쓰신 글 :
: 안녕하세요 ?
: 또 질문 드리네요^^;
: 여러 값중에서 제일 큰값을 찾아 리턴하는 함수가 있는지요 ?
:
: 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*>());

+ -

관련 글 리스트
63542 [질문] 여러 값중 제일 큰값을 리턴하는 함수는? 라이손레종ㅎ 1167 2011/01/20
63547     Re:[질문] 여러 값중 제일 큰값을 리턴하는 함수는? 이현수 1995 2011/01/21
63562         답변 감사드립니다. ^^ 라이손레종ㅎ 995 2011/01/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.