bind1st(op, value)
bind2nd(op, value)
not1(op)
not2(op)
mem_fun_ref(op)
mem_fun(op)
ptr_fun(op)
// STL_算法操作.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
template<typename T>
struct IsOdd
{
IsOdd(T n)
{
divisor = n;
}
bool operator()(T elementNum)
{
return !(elementNum%divisor);
}
private:
T divisor;
};
int main()
{
vector<int> ivec;
ivec.push_back(4);
for (size_t i = 0; i<9 ;++i)
{
ivec.push_back(i);
}
ivec.push_back(4);
for (std::vector<int>::iterator iter = ivec.begin(); iter!=ivec.end(); iter++ )
{
cout << *iter << " ";
}
int i = count(ivec.begin(), ivec.end(), 4);
cout << endl << "一共有" << i << "个4" << endl;
IsOdd<int> isodd(2);
i = count_if(ivec.begin(), ivec.end(), isodd);
cout << "一共有" << i << "个奇数" << endl;
// bind2nd为函数适配器
i = count_if(ivec.begin(), ivec.end(), not1(bind2nd(greater<int>(), 4))); // param1 > param2
// cout << "一共有" << i << "个大于4" << endl;
cout << "一共有" << i << "个小于等于4" << endl;
system("pause");
return 0;
}