C++STL:仿函数
C++仿函数应用实例
#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
template<class T>
struct GT
{
GT (const T& a) : m_a(a) {}
bool operator()(const T& left)
{
return left >= m_a;
}
T m_a;
};
int main()
{
list<int> iLst;
iLst.push_back(12);
iLst.push_back(178);
iLst.push_back(200);
list<int>::iterator iter =
find_if(iLst.begin(), iLst.end(), GT<int>(100));
if (iLst.end() != iter)
{
cout << "find" << endl;
cout << *iter << endl;
}
else
{
cout << "not find" << endl;
}
return 0;
}
函数指针调用与函数对象调用的等效性
#include <Windows.h>
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <list>
#include <algorithm>
using namespace std;
//*********************************************************
// 函数
//*********************************************************
bool GreaterThan(int left, int right)
{
return left >= right;
}
typedef bool (*GreaterThanFuncPtrType)(int, int);
//*********************************************************
// 仿函数类
//*********************************************************
template<class T>
struct GT
{
bool operator()(const T& left, const T& right) const
{
return left >= right;
}
};
int main()
{
list<int> iLst;
iLst.push_back(10);
iLst.push_back(110);
iLst.push_back(120);
//-----------------------------------------------------
// 用函数指针调用
//-----------------------------------------------------
GreaterThanFuncPtrType pGreaterThan
= GreaterThan;
list<int>::iterator iter = iLst.begin();
for(; iter != iLst.end(); ++iter)
{
cout << pGreaterThan(*iter, 100) << endl;
}
//-----------------------------------------------------
// 用函数对象调用
//-----------------------------------------------------
GT<int> gt;
iter = iLst.begin();
for(; iter != iLst.end(); ++iter)
{
cout << gt(*iter, 100) << endl;
}
return 0;
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。