이글루스 로그인


알고리즘과 함수객체.

 
알고리즘과 함수객체를 정리한다. STL 에서 컨테이너만을 쓴다면 반쪽만 쓰는것일꺼다...

함수 객체를 쓰면서 알고리즘을 적용한다면 무한한 C++ 의 세계를 맛 볼지도 모르겠다.

나도 사실 컨테이너만 썼다 OTL 알고리즘을 배우면서 템플릿을 점점 접근해가면 일거양득을 할수도 있고....

하여튼 나름대로 정리를 해볼까 한다.


 STL 에서 알고리즘은 <algorithm> 함수객체는 (Function Objects)  <functional> 에 정의

 알고리즘의 예제 :: http://anaturb.net/C/algo_example.htm

알고리즘은 함수 객체를 좋아한다 왜 ?? -->

   알고리즘은 템플릿으로 구현되며 템플릿 인자로 함수포인터와 함수객체를 받을수 있는데

   함수객체의 경우 템플릿으로 구현되며 inline  이 되어서 성능이 향상될수 있다.

   반면 함수 포인터는 포인터를 활용하여 함수를 호출하여야 하므로 인라인화 되기 어렵다.
 
   참고 )   < [9] Inline functions 참조 > ::  클래스 내부에 함수가 정의 되어 있으면 inline 화 가능성이 높다.

                  http://en.wikipedia.org/wiki/Function_object#Performance 참조

STL 에서 제공하는 함수객체들이 많은데 모두 unary_function 이나 binary_function 을 상속한다.

Predicate 란 bool 리턴하는 함수 객체 또는 함수이다.

Binder :: 2 개의 인자를 필요로 하는 Predicate 의 인자1개를 고정시켜 인자1개의 Predicate 화.

Adapters  (C++ mem_fun) :: 알고리즘은 보통 함수를 호출한다. 객체의 멤버함수를 알고리즘 인자로 호출시 필요.

Negator :: Predicate 의 리턴값을 부정할때 사용




* 알고리즘을 통한 컨테이너 내용 출력

   #include <iterator>
   #include <utility>

   copy(vec.begin(),vec.end(),ostream_iterator<int>(cout," "));
   for_each(vec.begin(),vec.end(),ostream_iterator<int>(cout," ")); // 컴파일 에러 생김.

 

by Gerald | 2007/02/12 16:35 | C++/STL/Boost/ | 트랙백(1) | 덧글(0)

트랙백 주소 : http://kicom95.egloos.com/tb/917397
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from Gerald 의 프로그래밍 at 2007/02/14 09:53

제목 : The C++ Programing Language
공식홈페이지 ::http://www.research.att.com/~bs/C++.html 이 책을 구입한것은 2001년 초 와우북에서 2003년 나의 필리핀 어학연수때 동행만 한책 ㅡ,.ㅡ;; 이 책을 대강 읽어 본 것은 2004년 C++ 을 본격적으로 공부한 시기 2006년 C++ 을 총정리 해보겠다는 심산으로 다시 2007년 도전함. (번역본을 살까 고민했으나 그냥 공부하기로... 싸이오블레이드님과 스터디 예정......more

:         :

:

비공개 덧글


◀ 이전 페이지          다음 페이지 ▶