Share via


演算法

演算法是標準樣板程式庫的基本部份。 而是個 iterator 有本身的容器,但無法運作演算法。 因此,相同的演算法可由大部分就算不 STL 容器。 本節將討論的慣例和術語的 STL 演算法。

備註

演算法樣板函式的說明會採用數個簡短片語:

  • 片語 」 範圍內 [ab)"表示開頭的零或多個不連續的值序列 a ,但不是含 b。 範圍是有效的只有當 b 可從 A; 可以儲存 a 物件中 n (n = a),增加物件的零或多次 (+ + 中n),並且使物件比對是否等於 b 之後有限數量的增量 (N = = B*)。*

  • 片語"每個 n 範圍內 [ab) 」 指的是 n 開頭的值 a ,並遞增零或多次,直到它等於值 b。 大小寫 n = = b 不在範圍內。

  • 片語"的最小值 n 範圍內 [ab),讓 x」 指的是條件 x 決定每個 n 範圍內 [ab) 直到條件 x 符合。

  • 片語 」 的最大值 n 範圍內 [ab),讓 x 表示 x 決定每個 n 範圍內 [ab)。 這項功能存放在K一份 n 每次條件 x 符合為止。 發生這類的存放區時,此函式來取代的最終值 n,哪一個等於 b,且值為K。 對於雙向或隨機存取 iterator,不過,也表示, n 與範圍中最高值開始,並會減少範直到條件 x 符合為止。

  • 運算式,例如 x - Y,其中 xy 是不是隨機存取 iterator 的 iterator,但是可以是數學的角度來說。 此函式一定也不會評估運算子- 如果您必須先決定這樣的值。 一樣也適用於運算式類似 x + nx - N,其中 n 是整數型別。

數種演算法做比較成對,例如與述詞的使用operator==,而會產生bool結果。 述詞函式operator==,或經更換之 「,必須不會改變其中一個運算元。 它必須產生相同bool造成每次評估時,而且它必須產生相同的結果,如果其中一個運算元的一份替換為運算元。

數種演算法做必須加上嚴格弱式順序在成對的序列中的項目上的述詞的使用。 For the predicate pr(X, Y):

  • 指的是嚴格pr(xx) 為 false。

  • 指的是不擅於 xy 有對等排序 if!pr(X, Y) && !pr(Y, X) (X == Y does not need to be defined).

  • 排序指的是pr(xy) & & pr(Y, Z) implies pr(X, Z).

這些演算法中的部分隱含使用述詞 x < Y. 通常滿足嚴格的弱式順序要求其他述詞就是 x > Y, less(X, Y), and greater(X, Y). 述附註,不過,該詞類似 x < = yx > = y 不符合這項需求。

一連串的 iterator,範圍中所指定的項目 [First, Last) 是由運算子排序序列**<** if,每個 n 在範圍 [0,Last - First) 和每個 m 在範圍內 (N,Last - First) 述詞!(*(First + M) < *(First + N)) is true. (請注意在以遞增順序排序項目)。 述詞函式運算子 <,或經更換之 「,必須不會改變其中一個運算元。 它必須產生相同bool造成每次評估時,而且它必須產生相同的結果,如果其中一個運算元的一份替換為運算元。 此外,它必須加上嚴格弱式順序對它比較運算元。

一連串的 iterator,範圍中所指定的項目 First, Last) 會依據排序的堆積運算子 < if,每個 n 在範圍 [1]Last - First) 述詞!(*First < *(First + N)) is true. (第一個項目是最大值)。 其內部結構否則只有知道樣板函式 make_heappop_heap,以及 push_heap。 排序序列,述詞函式與運算子 <,或經更換之 「,必須不會改變其中一個運算元,而且它必須加上嚴格弱式順序對它比較運算元。 它必須產生相同bool造成每次評估時,而且它必須產生相同的結果,如果其中一個運算元的一份替換為運算元。

STL 演算法都位於<algorithm><numeric>標頭檔。

請參閱

參考

標準樣板程式庫

在標準 C++ 程式庫中的執行緒安全