-
C++ Utility (function)카테고리 없음 2014. 2. 26. 00:48
Function은 함수 포인터나 람다 표현식등 아무것이나 담아서 호출가능하다.
Function <R(argtype1, argtype2, ....)> 으로 표현한다.
#include <iostream>
#include <functional>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
void func(int num, const string& str)
{
cout << "\nnum " << num << endl <<"string " << str << endl;
}
bool isEven(int num)
{
return num%2==0;
}
void print(int n)
{
cout << n << " ";
}
// 함수 포인터를 함수 인자로 받는다.
void process(const vector<int>& vec, function<void(int)> f)
{
// int cnt = count_if(vec.begin(), vec.end(), f);
// print( cnt);
for (auto&i : vec)
f(i);
}
void main()
{
// function<void(int, const string&)> f1 = func;
vector<int> vNum;
for (int i=0;i<10;++i)
vNum.push_back(i);
process(vNum, print);
// auto f1 = isEven;
// int cnt = count_if(vNum.begin(), vNum.end(), f1);
// f1(1,"test");
int cnt=0;
// 람다 표현식을 사용하는 예
process(vNum, [&cnt](int num){cnt+=isEven(num);});
cout << "even number counter " << cnt << endl;
process(vNum, [&cnt](int num){cnt+=num;});
cout << "sum number " << cnt << endl;;
return;
}