天天看點

C++ STL算法頭檔案<algorithm>、<numeric>、<functional>算法概述非更易型算法更易型算法移除型算法變序型算法排序算法檢驗是否排序算法已排序區間算法數值算法

頭檔案

<algorithm>、<numeric>、<functional>

某些算法需要數值處理,是以需要

<numeric>

,使用STL算法時,常常用到函數對象和函數擴充卡,是以需要

<functional>

算法概述

兩個特殊字尾:

1.字尾_if

2.字尾_copy

按照功能來分類:

1.非更易型算法

2.更易型算法

3.移除型算法

4.變序型算法

5.排序算法

6.已排序區間算法

7.數值算法

非更易型算法

非更易型算法既不改動元素次序,也不改動元素值.通過input疊代器和forward疊代器完成工作.渴作用域所有标準容器身上

C++ STL算法頭檔案&lt;algorithm&gt;、&lt;numeric&gt;、&lt;functional&gt;算法概述非更易型算法更易型算法移除型算法變序型算法排序算法檢驗是否排序算法已排序區間算法數值算法

更易型算法

更易型算法,要麼直接改變元素值,就是在複制元素到另一區間的過程中改變元素值.

C++ STL算法頭檔案&lt;algorithm&gt;、&lt;numeric&gt;、&lt;functional&gt;算法概述非更易型算法更易型算法移除型算法變序型算法排序算法檢驗是否排序算法已排序區間算法數值算法

最基本的更易型算法是for_each()和transform():

移除型算法

C++ STL算法頭檔案&lt;algorithm&gt;、&lt;numeric&gt;、&lt;functional&gt;算法概述非更易型算法更易型算法移除型算法變序型算法排序算法檢驗是否排序算法已排序區間算法數值算法

注意,移除型算法隻是邏輯上移除元素,其手段是:将不應移除的元素往前覆寫應被移除的元素,是以它并不改變操作區間内的元素個數,而是傳回邏輯上的新終點位置.

變序型算法

C++ STL算法頭檔案&lt;algorithm&gt;、&lt;numeric&gt;、&lt;functional&gt;算法概述非更易型算法更易型算法移除型算法變序型算法排序算法檢驗是否排序算法已排序區間算法數值算法

所謂的變序指的是通過元素值的指派和互換,改變元素順序,但不改變元素值

排序算法

C++ STL算法頭檔案&lt;algorithm&gt;、&lt;numeric&gt;、&lt;functional&gt;算法概述非更易型算法更易型算法移除型算法變序型算法排序算法檢驗是否排序算法已排序區間算法數值算法

排序算法是一種特殊的變序型算法,它們也改變元素的順序.但它們更複雜,也花費更多時間

如果要考慮對所有元素排序,可考慮以下算法:

sort()

:采用快速排序算法,保證了很好的平均效能,複雜度為n x log(n)

partial_sort()

:一般采用的是堆排序算法,在任何情況下保證n x log(n)的複雜度,然而很多實際情況中比堆排序比快速排序慢2~5倍.

partial_sort()

的優點是它在任何時候都保證n x log(n)複雜度,絕不會變成二次複雜度,

sort()

在最差情況下有可能程式設計二次複雜度

partial_sort()還有一種特殊能力:如果你隻需要前n個元素排序,它可以在任務完成立即停止.如果想對所有元素排序,可以将序列重點作為第二實參是最後一個實參:

stable_sort():傳統上采用了歸并排序,它對所有元素進行了排序,隻有在記憶體充足的前提下它才有n x log(n)複雜度,否則複雜度為 n x log(n) x log(n),它的優點是保持相等元素之間的相對次序

檢驗是否排序算法

C++ STL算法頭檔案&lt;algorithm&gt;、&lt;numeric&gt;、&lt;functional&gt;算法概述非更易型算法更易型算法移除型算法變序型算法排序算法檢驗是否排序算法已排序區間算法數值算法

已排序區間算法

已排序區間算法指的是:其作用的區間在某種排序準則下已經排序

C++ STL算法頭檔案&lt;algorithm&gt;、&lt;numeric&gt;、&lt;functional&gt;算法概述非更易型算法更易型算法移除型算法變序型算法排序算法檢驗是否排序算法已排序區間算法數值算法

數值算法

數值算法以各種不同的方式結合數值元素:

C++ STL算法頭檔案&lt;algorithm&gt;、&lt;numeric&gt;、&lt;functional&gt;算法概述非更易型算法更易型算法移除型算法變序型算法排序算法檢驗是否排序算法已排序區間算法數值算法

繼續閱讀