C 泛型演算法

2021-07-24 22:36:33 字數 1097 閱讀 2669

1、泛型演算法定義

泛型演算法:因為它們實現共同的操作,所以稱之為「演算法」;而「泛型」指的是它們可以操作在多種容器型別上——不但可作用於 vector 或 list 這些標準

庫型別,還可用在內建陣列型別、甚至其他型別的序列上,這些我們將在本章的

後續內容中了解。自定義的容器型別只要與標準庫相容,同樣可以使用這些泛型

演算法。

泛型演算法本身從不執行容器操作,只是單獨依賴迭代器和迭代器操作實現。演算法基於迭代器及其操作實現,而並非基於容器操作。這個事實也

許比較意外,但本質上暗示了:使用「普通」的迭代器時,演算法從不修

改基礎容器的大小。正如我們所看到的,演算法也許會改變儲存在容器中

的元素的值,也許會在容器內移動元素,但是,演算法從不直接新增或刪

除元素。

​除了少數例外情況,所有演算法都在一段範圍內的元素上操作,我們將這段範圍稱為「輸出範圍(input range)」。帶有輸入範圍引數的演算法總是使用頭兩

個形參標記該範圍。這兩個形參是分別指向要處理的第乙個元素和最後乙個元素

的下一位置的迭代器。

演算法不直接修改容器的大小。如果需要新增或刪除元素,則必須使用容器操作。

2、演算法函式命名規範:

​(1)、帶有謂詞函式形參的演算法,其名字帶有字尾 _if,區別帶有乙個值或乙個謂詞函式引數的演算法版本

(2)、_copy 字尾區別是否實現複製的演算法版本

3、容器特有的演算法

(1)list 

list 容器上的迭代器是雙向的,而不是隨機訪問型別。由於 list 容器不支援隨機訪問,因此,在此容器上不能使用需要隨機訪問迭代器的演算法。這些算

法包括 sort 及其相關的演算法。

​對於 list 物件,應該優先使用 list 容器特有的成員版本,而不是泛型演算法。

C 泛型演算法

標準庫並未給每個容器都定義成員函式來實現這些操作,而是定義了一組泛型演算法,稱他們為演算法是因為他們實現了一些經典演算法的公共介面,如排序和搜尋 稱他們為排序的是因為它們可以用於不同型別的元素和多種容器型別。大多數演算法都定義在標頭檔案algorithm中。標準庫還在標頭檔案numeric中定義了一...

C 泛型演算法

1 泛型演算法初始 標準庫演算法都是對乙個範圍內的元素進行操作 除了少數例外 並將此範圍稱為 輸入範圍 而且總是使用前兩個引數來表示次範圍,這兩個引數分別代表,要處理的首元素和尾元素之後位置的迭代器。1.1 唯讀演算法 只會讀取輸入範圍內的元素,而從不改變元素 find int sum accumu...

c 泛型演算法

泛型演算法都定義在標頭檔案algorithm中,演算法並不直接操作容器,而是遍歷由兩個迭代器指定的乙個元素範圍。find操作的是迭代器,因此我們可以用同樣的find函式在任何容器中查詢值 vector a int val 3 auto result find a.begin a.end val co...