函式物件:乙個過載了運算子()的個物件,可以像乙個函式一樣使用。
①普通的函式
bool comp(int val)
②函式物件,宣告為模板類,並可以接受引數,具有更大擴充套件性
templateclass comp
bool operator() (t val)
private:
t m_val;
};
呼叫上面兩種情況,實際是一樣,但是函式物件可以設定引數,能夠靈活控制比較值大小
vectorvec;
for (int i = 1; i< 20; ++i)
vec.push_back(i);
int count = count_if(vec.begin(), vec.end(), comp);
cout<(5));
coutfor (char c = 'a'; c < 'z'; ++c)
c_vec.push_back(c);
cout<('c'))<③自己寫的統計函式
templateint count_n(t *arr, int n, func func)
呼叫統計函式
int arr = ;
count = count_n>(arr, sizeof(arr) / sizeof(int), comp(1));
cout<
[cpp] view plaincopy
#ifndef string_match_hpp_
#define string_match_hpp_
#include #include using std::string;
typedef unsigned int uint;
enum findmodes
;
typedef struct tagfindstr
findstr;
typedef findstr* lpfindstr;
class findmatchingstring : public std::unary_function
bool operator()(string& strcmp) const
return retval;
} private:
lpfindstr m_lpfs;
};
#endif /* string_match_hpp_ */
接著就是使用remove_if方法了。檔案main.cpp
[cpp] view plaincopy
#include #include #include #include #include "header/string_match.hpp"
using std::vector;
using std::string;
using std::cout;
using std::endl;
//using std::remove_if;
int main(int argc, char* argv)
cout << "]" << endl;
findstr fs;
fs.imode = fm_contains;
fs.szmatchstr = "alice";
vs.erase(std::remove_if(vs.begin(), vs.end(), findmatchingstring(&fs)), vs.end());
cout << "after remove:\n[" ;
for (vector::iterator iter=vs.begin();iter!=vs.end();iter++)
cout << "]" << endl;
return 0;
}
STL 函式物件
一 函式物件 functor stl中提供了一元和二元函式的兩種functor,通過unary function和binary function提供了這兩種不同引數數量的functor的基本結構,在這兩個型別中,分別內嵌定義一元和二元函式操作在模版推演的時候需要用到的typedef.一元函式的定義為...
STL 函式物件
4.1函式物件 4.1.1函式物件概念 過載函式呼叫操作符的類,其物件常稱為函式物件 函式物件使用過載的 時,行為類似函式呼叫,也叫仿函式 本質 函式物件 仿函式 是乙個類,不是函式 函式物件使用 特點 函式物件在使用時,可以像普通函式那樣呼叫,可以有引數,可以有返回值 函式物件超出普通函式概念,函...
STL 學習筆記 之 函式物件
c stl,三大核心元件 containers,iterators以及algorithms,即容器,迭代器和演算法。另外還一種重要元件,即函式物件 functionobject r 函式物件又稱為仿函式 functor 函式物件其實就是乙個行為類似函式的 東西 它可以沒有引數,也可以帶有若干引數,其...