C 程式設計思想 卷二 通用演算法

2021-05-10 10:36:13 字數 1274 閱讀 1222

判定函式:

例:只把數值1中滿足條件的值複製到陣列2中

remove_copy_if()演算法對輸入序列的每個元素都應用gt15(),並且在向輸出序列寫入時忽略掉那些使判定函式產生真值的元素。

流迭代器

例:輸出流迭代器

例:輸入流迭代器

remove_copy_if()的第1個引數,把乙個istream_iterator的物件應用於含有正數的輸入檔案流。第2個引數實用istream_iterator類的預設建構函式。這個呼叫構造了istream_iterator的乙個特殊值,用以指示檔案的結束。這樣,當第1個迭代器最終遇到物理檔案的結尾時,它與istream_iterator()的值進行是否相等的比較,以便演算法正確結束。注意,本例中完全避免了直接實用陣列。

函式物件:它實現起來像函式,同時儲存狀態,使用時卻不用考慮函式引數的個數。

函式物件是過載了operator()的類的乙個例項。

函式物件的分類:

發生器:一種沒有引數且返回乙個任意型別值的函式物件。

一元函式:一種只有乙個任意型別的引數,且返回乙個可能不同型別值的函式物件。

二元函式:一種有兩個任意型別的引數,且返回乙個任意型別值的函式物件。

一元判定函式:返回bool型值的一元函式。

二元判定函式:返回bool型值的二元函式。

嚴格弱序:一種更廣義地理解「相等」概念的二元判定函式。

術語:小於可比較:含有小於運算子 operator< 的類。

可賦值:含有對於同型別指定賦值操作符operator= 的類。

相等可比較:含有對於同型別相等運算子operator==的類。

標頭檔案中定義了大量有用的通用函式物件。

可以用函式物件介面卡來獲得乙個簡單的函式物件,並且調證它們用來與操作鏈中的其他函式物件配合。

例:自動建立函式物件:

可調整的函式物件:

標頭檔案中提供了兩種模板來定義型別名稱:unary_function和binary_function。當為派生自這些類的簡單函式物件填寫引數型別時,可以由這些型別作為函式引數。

函式指標介面卡:

ptr_fun()介面卡把指向乙個函式的指標轉化成為乙個函式物件。

例:ptr_fun()的二元版本

pow()函式在標準c++標頭檔案中定義,有多個過載版本,需要顯示函式模板特化。

例:呼叫有乙個引數的成員函式

transform()使用第1個範圍(物件生存的範圍)的開始和結束點;第2個範圍的開始點,就是持有的那個表示成員函式的引數;目的迭代器,在本例中就是標準輸出;且為每個物件呼叫函式物件。

C 程式設計思想 卷二 異常處理

關鍵字throw將導致一系列事情的發生 首先,它將建立程式所丟擲的物件的乙個拷貝。然後,包含throw表示式的函式返回了這個物件,即使該函式原先並未設計為返回這種物件型別。另外,異常發生之前建立的區域性物件被銷毀 呼叫物件的析構函式 乙個異常被丟擲以後,異常處理系統將按照在源 中出現的順序查詢最近的...

C 程式設計思想 卷二 防禦性程式設計

assert 巨集斷言定義在標頭檔案中 典型的assert 實現 ifdef ndebug define assert cond void 0 else void assertimpl const char const char long define assert cond cond void 0...

Adapter優化(二)通用ViewHolder

普通的viewholder類 class viewholder通用的話,肯定不能具體那些元件了,所以我們用sparsearray存放元件,這個容器類似於map,但是效率更高,鍵只能是integer,所以k id of view v view。再分析下getview 方法 1 獲取乙個viewhold...