程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++STL:仿函數

C++STL:仿函數

編輯:關於C++

C++仿函數應用實例

#include 
#include 
#include 

using namespace std;

template
struct GT
{
    GT (const T& a) : m_a(a) {}
    bool operator()(const T& left)
    {
        return left >= m_a;
    }
    T m_a;
};

int main()
{
    list iLst;
    iLst.push_back(12);
    iLst.push_back(178);
    iLst.push_back(200);

    list::iterator iter = 
        find_if(iLst.begin(), iLst.end(), GT(100));
    if (iLst.end() != iter)
    {
        cout << "find" << endl;
        cout << *iter << endl;
    }
    else
    {
        cout << "not find" << endl;
    }

    return 0;
}

函數指針調用與函數對象調用的等效性

#include 
#include 
#include 
#include
#include 
#include 
#include 

using namespace std;

//*********************************************************
// 函數
//*********************************************************
bool GreaterThan(int left, int right)
{
    return left >= right;
}
typedef bool (*GreaterThanFuncPtrType)(int, int);

//*********************************************************
// 仿函數類
//*********************************************************
template
struct GT
{
    bool operator()(const T& left, const T& right) const
    {
        return left >= right;
    }
};

int main()
{
    list iLst;
    iLst.push_back(10);
    iLst.push_back(110);
    iLst.push_back(120);

    //-----------------------------------------------------
    // 用函數指針調用
    //-----------------------------------------------------
    GreaterThanFuncPtrType pGreaterThan
        = GreaterThan;

    list::iterator iter = iLst.begin();
    for(; iter != iLst.end(); ++iter)
    {
        cout << pGreaterThan(*iter, 100) << endl;
    }

    //-----------------------------------------------------
    // 用函數對象調用
    //-----------------------------------------------------
    GT gt;
    iter = iLst.begin();
    for(; iter != iLst.end(); ++iter)
    {
        cout << gt(*iter, 100) << endl;
    }

    return 0;
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved