predicate / function object / unary / binary
용어정리
- function object(함수객체 Functor) : 클래스에서 연산자 ()를 오버로딩 하여 해당 클래스의 인스턴스를 함수 형태로 호출할 수 있게 한 클래스 객체를 말한다.
- predicate (술어) : 적어도 하나 이상의 개체를 전달받아서 bool 값을 반환 하는 함수 객체 이다.
- unary : 단항
- binary : 이항
STL 템플릿 예제로 확인 해보자.
예제
for_each
std::for_each
template <class InputIterator, class Function>
Function for_each (InputIterator first, InputIterator last, Function fn);
parameters
매개변수를 확인 해보면 아래와 같다. 즉 iterator와 단항 함수 객체를 매개변수로 받는다.
* @param __first An input iterator.
* @param __last An input iterator.
* @param __f A unary function object.
example
// for_each example
#include <iostream> // std::cout
#include <algorithm> // std::for_each
#include <vector> // std::vector
void myfunction (int i) { // function:
std::cout << ' ' << i;
}
struct myclass { // function object type:
void operator() (int i) {std::cout << ' ' << i;}
} myobject;
int main () {
std::vector<int> myvector;
myvector.push_back(10);
myvector.push_back(20);
myvector.push_back(30);
std::cout << "myvector contains:";
for_each (myvector.begin(), myvector.end(), myfunction);
std::cout << '\n';
// or:
std::cout << "myvector contains:";
for_each (myvector.begin(), myvector.end(), myobject);
std::cout << '\n';
return 0;
}
Output:
myvector contains: 10 20 30
myvector contains: 10 20 30
- int i 하나를 매개변수로 가지고 () 연산자를 오버로딩하여 for_each 3번째 인자인 Function에 전달할 단항 함수 객체를 생성
struct myclass { //unary function object type: void operator() (int i) {std::cout << ' ' << i;} } myobject;
위의 예제에서 function object / unary / binary 3가지에 대해 알아보았으니 predicate에 대해 알아보자.
예제
find_if
std::find_if
template <class InputIterator, class UnaryPredicate>
InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred);
parameters
매개변수를 확인 해보면 , iterator 와 단항 술어 임을 확인 할 수 있다.
* @param __first An input iterator.
* @param __last An input iterator.
* @param __pred A predicate.
example
// find_if example
#include <iostream> // std::cout
#include <algorithm> // std::find_if
#include <vector> // std::vector
struct myclass { // unary predicate
bool operator() (int i) {return ((i%2)==1);}
} myobject;
int main () {
std::vector<int> myvector;
myvector.push_back(10);
myvector.push_back(25);
myvector.push_back(40);
myvector.push_back(55);
std::vector<int>::iterator it = std::find_if (myvector.begin(), myvector.end(), myobject);
std::cout << "The first odd value is " << *it << '\n';
return 0;
}
Output:
The first odd value is 25
- int i 하나를 매개변수로 가지고 () 연산자를 오버로딩하며 bool을 반환하는 find_if 3번째 인자인 Function에 전달할 단항 함수 개체를 생성 얼핏 보면 위의 예제와 다를 것이 없지만 bool을 반환 하는 함수 객체 즉 predicate라는 것을 알 수 있다.
struct myclass { // unary predicate bool operator() (int i) {return ((i%2)==1);} } myobject;
0 개의 댓글:
댓글 쓰기