天天看點

從零開始學C++之STL(四):算法簡介、7種算法分類

一、算法

算法是以函數模闆的形式實作的。常用的算法涉及到比較、交換、查找、搜尋、複制、修改、移除、反轉、排序、合并等等。

算法并非容器類型的成員函數,而是一些全局函數,要與疊代器一起搭配使用。

算法的優勢在于隻需實作一份,可以适應所有的容器,不必為每一種容器量訂制。也可以與使用者定義的容器搭配。

算法尾詞:

_if

比如find(按某個值來查找),find_if(按某個條件來查找)

_copy

這個尾詞用來表示在算法中,元素不光被操作,還會被複制到目标區間。比如reverse、reverse_copy

二、算法分類

1、非變動性算法既不改變元素次序,也不改變元素值。

從零開始學C++之STL(四):算法簡介、7種算法分類

2、變動性算法,要麼直接改變元素值,要麼就是在複制到另一個區間的過程中改變元素值。如果是第二種情況,原區間不會發生變化

從零開始學C++之STL(四):算法簡介、7種算法分類

3、移除性算法是一種特殊的變動性算法。移除性算法是在一區間内移除某些元素,這些算法并不能改變元素的數量,它們隻是以邏輯上的思考,将原本置于後面的“不需要移除元素”向前移動,覆寫那些被移除元素而已。它們都傳回新區間的邏輯終點。移除性算法也可以在複制的過程中執行移除。注意,目标區間不能是關聯式容器。

從零開始學C++之STL(四):算法簡介、7種算法分類

4、變序性算法改變元素次序,但不改變元素值。這些算法不能用于關聯式容器,因為關聯式容器中,元素有固定的次序。

從零開始學C++之STL(四):算法簡介、7種算法分類

5、排序算法,排序算法是一種特殊的變序算法。但比一般的變序性算法更複雜,花費更多的時間

從零開始學C++之STL(四):算法簡介、7種算法分類

6、已序區間算法,一般來說這些算法的結果,仍然是已序的。

從零開始學C++之STL(四):算法簡介、7種算法分類

7、用來處理數值的算法,需要加上頭檔案 #include<numeric>

從零開始學C++之STL(四):算法簡介、7種算法分類

在後面的文章中将對7種算法分别舉一些例子來示例。

參考:

C++ primer 第四版

Effective C++ 3rd

C++程式設計規範