2007년 02월 12일
알고리즘과 함수객체.
알고리즘과 함수객체를 정리한다. 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," ")); // 컴파일 에러 생김.

함수 객체를 쓰면서 알고리즘을 적용한다면 무한한 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 쌩쥐
- 알고리즘의 매개 변수로는 함수 대신 함수 객체가 괜찮다. by 쌩쥐
- 멤버함수, 프랜드함수 by 일팔구
- [STL] 개요 by 나나세
- C언어 시작 by 엘시스라아르위르
# by | 2007/02/12 16:35 | C++/STL/Boost/ | 트랙백(1) | 덧글(0)





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