c 之函式物件 謂詞 內建函式物件

2021-10-14 16:11:09 字數 3054 閱讀 2761

函式物件概念

1、過載函式呼叫操作符的類,其物件稱為函式物件

2、函式物件使用過載的()時,行為類似與函式呼叫,也叫仿函式

本質

函式物件(仿函式)是乙個類,不是乙個函式

函式物件的使用

特點1、函式物件在使用時,可以向普通函式那樣呼叫,可以有引數,可以有返回值

2、函式物件超出普通函式的概念,函式物件可以有自己的狀態

3、函式物件可以作為引數傳遞

#includeusing namespace std;

//1、函式物件在使用時,可以向普通函式那樣呼叫,可以有引數,可以有返回值

class myadd

};void test01()

//2、函式物件超出普通函式的概念,函式物件可以有自己的狀態

class myprint

void operator()(string test)

int count; //內部自己的狀態

};void test02()

//3、函式物件可以作為引數傳遞

void doprint(myprint& myprint, string test)

void test03()

int main()

概念

1、返回bool型別的仿函式稱為謂詞

2、如果operator()接受乙個引數,那麼就叫一元謂詞

3、如果operator()接受兩個引數,那麼就叫二元謂詞

一元謂詞

class greaterfive

else

}};void test01()

//查詢容器中,有沒有大於5的數字

//greaterfive()匿名函式物件

vector::iterator it = find_if(v.begin(), v.end(), greaterfive());

if (it == v.end())

else

for (; it < v.end(); it++)

cout << endl;

}

二元謂詞

class mycompare

};void test01()

cout << endl;

//使用函式物件,改變演算法策略,變為排序規則為從大到小

sort(v.begin(), v.end(), mycompare());

for (vector::iterator it = v.begin(); it != v.end(); it++)

cout << endl;

}

算數仿函式(函式物件)

stl內建了一些函式物件

算術仿函式:實現四則運算,其中negate是一元運算,其他都是二元運算

仿函式原型

//template t plus //加法仿函式

//template t minus //減法仿函式

//template t multiplies //乘法仿函式

//template t divides //除法仿函式

//template t modulus //取模仿函式

//template t negate //取反仿函式

用法

//這些仿函式所產生的物件,用法和一般函式完全相同

//使用內建函式物件,需要引入標頭檔案#include

void test01()

void test02()

實現邏輯運算

函式原型

//template bool logical_and 與

//template bool logical_or 或

//template bool logical_not 非

void test01()

cout << endl;

//利用邏輯與或非將容器v搬運到容器v2中,並執行取反操作

vectorv2;

v2.resize(v.size());

transform(v.begin(), v.end(), v2.begin(), logical_not());

for (vector::iterator it = v2.begin(); it != v2.end(); it++)

cout << endl;

}

實現關係對比

函式原型

//template bool equal_to //相等

//template bool not_equal_to //不相等

//template bool greater //大於

//template bool greater_equal //大於等於

//template bool less //小於

//template bool less_equal //小於等於

void test01()

cout << endl;

//降序

//方法一

//sort(v.begin(), v.end(), mycompare());

//for (vector::iterator it = v.begin(); it != v.end(); it++)

// //cout << endl;

//方法二

sort(v.begin(), v.end(),greater());//原理就是方法一

for (vector::iterator it = v.begin(); it != v.end(); it++)

cout << endl;

}

c 函式物件之謂詞

概念 返回bool型別的仿函式被稱為謂詞 如果operator 接受乙個引數,那麼就叫一元謂詞 如果operator 接受兩個引數,那麼就叫二元謂詞 一 一元謂詞 includeusing namespace std include include 仿函式 返回值型別是bool資料型別,稱為謂詞 一...

c 提高程式設計 4 2謂詞 4 3內建函式物件

4.2.1謂詞概念 概念 返回bool型別的仿函式稱為謂詞 如果operator 接受乙個引數,那麼叫做一元謂詞 如果operator 接受二個引數,那麼叫做二元謂詞 4.3.1內疚函式物件意義 概念 stl內建了一些函式物件 分類 算術仿函式 邏輯仿函式 關係仿函式 用法 這些仿函式所產生的物件,...

C 模板學習之函式物件之謂詞

函式物件是用物件來表示的函式 可以執行operator 的物件都叫做函式物件。謂詞是那些返回bool,operator 操作的函式物件。考慮如何對乙個序列求和 函式物件的優勢在於可以將引數,返回值存在物件裡面 而函式則不能。比如說 簡單的求序列中和的函式 template class sum sum...