第四十六節 C 函式物件 用於STL的演算法中

2021-08-19 14:22:32 字數 2261 閱讀 5640

函式物件: 常用於標準模板庫stl的演算法

1. 定義上為函式的物件;

2. 實現上是實現了operator()的類的物件;

常用的函式物件可分為多種:

1 一元函式:輸入為1個引數

2 二元函式:輸入為2個引數

3 帶變數的一元函式:輸入為1個引數,且類內有屬性成員

4 帶變數的二元函式:輸入為2個引數,且類內有屬性成員

5 一元謂詞:輸入為1個引數,返回值為bool變數

6 一元謂詞:輸入為5個引數,返回值為bool變數

這裡僅對一元函式,一元謂詞,二元謂詞進行舉例。

#include #include #include #include using namespace std;

/*1 函式模板:為了列印不同型別的內容*/

template void displaycontent(const t1 input)

cout << endl;

}/*2 函式物件(實現operator()類的物件) - 一元函式*/

template class funobjonevar

};/*3 函式物件- 一元謂詞*/

template class funobjoneword

bool operator () (const t& input)

};/*4 函式物件- 二元謂詞*/

template class funobjtwoword

};int main()

/*使用函式物件-一元函式,用於stl演算法for_each()*/

cout << "the original data:" << endl;

std::for_each(intvector.begin(), intvector.end(), funobjonevar ());

cout << endl;

/*使用函式物件- 一元謂詞,用於stl演算法find_if*/

int divinput = 2;

cout << "the value%2 == 0 data:" << endl;

auto iterator = std::find_if(intvector.begin(), intvector.end(), funobjoneword (divinput));

if (iterator != intvector.end())

cout << "value = " << *iterator << endl;

cout << endl;

/*使用函式物件- 二元謂詞,用於stl演算法sort()排列順序不考慮大小寫*/

std::vector charvector;

charvector.push_back('b');

charvector.push_back('a');

charvector.push_back('d');

charvector.push_back('e');

cout << "original char data:" << endl;

displaycontent(charvector);

cout << "de****t sort():" << endl;

sort(charvector.begin(), charvector.end());

displaycontent(charvector);

cout << "use funobjtwoword re-sort():" << endl;

sort(charvector.begin(), charvector.end(), funobjtwoword());

displaycontent(charvector);

return 0;

}

the original data:

0 1 2 3 4 5

the value%2 == 0 data:

value = 0

original char data:

[0] = b

[1] = a

[2] = d

[3] = e

de****t sort():

[0] = a

[1] = d

[2] = b

[3] = e

use funobjtwoword re-sort():

[0] = e

[1] = b

[2] = d

[3] = a

韓順平網頁設計第四十六講

dom把html中的每個元素都當成乙個node 節點 來看待,每個node都有很多方法。具體如下表 在dom程式設計中,乙個html文件會被當做dom樹對待,所有的html元素都被轉換成node節點。所以我們就可以用node 節點的屬性和方法來操作這些html元素。比如上圖的方法。document的...

NeHe OpenGL第四十六課 全屏反走樣

nehe opengl第四十六課 全屏反走樣 全屏反走樣 下面我們來介紹如何使用多重取樣,不向其他的擴充套件,我們在使用多重取樣時,必須在視窗建立時告訴它使用多重取樣,典型的步驟如下 1 建立乙個視窗 2 查詢是否支援多重取樣 3 如果支援刪除當前的視窗,使用支援多重取樣的格式建立視窗 4 如果我們...

python學習第四十六天dir 函式用法

dir 函式有點像目錄的意思,但是他是包含由模組定義的名稱的字串的排序列表。這個列表包含模組中定義的所有模組,變數和函式的名稱。列舉其用法 import time content dir time print content 輸出結果 struct tm items doc loader name ...