C++STL:仿函数

2015-11-21 01:04:28 · 作者: · 浏览: 6

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 <windows.h>
#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; }