頭檔案 <algorithm>、<numeric>、<functional>
<algorithm>、<numeric>、<functional>
某些算法需要數值處理,是以需要 <numeric>
,使用STL算法時,常常用到函數對象和函數擴充卡,是以需要 <functional>
<numeric>
<functional>
算法概述
兩個特殊字尾:
1.字尾_if
2.字尾_copy
按照功能來分類:
1.非更易型算法
2.更易型算法
3.移除型算法
4.變序型算法
5.排序算法
6.已排序區間算法
7.數值算法
…
非更易型算法
非更易型算法既不改動元素次序,也不改動元素值.通過input疊代器和forward疊代器完成工作.渴作用域所有标準容器身上
更易型算法
更易型算法,要麼直接改變元素值,就是在複制元素到另一區間的過程中改變元素值.
最基本的更易型算法是for_each()和transform():
移除型算法
注意,移除型算法隻是邏輯上移除元素,其手段是:将不應移除的元素往前覆寫應被移除的元素,是以它并不改變操作區間内的元素個數,而是傳回邏輯上的新終點位置.
…
變序型算法
所謂的變序指的是通過元素值的指派和互換,改變元素順序,但不改變元素值
排序算法
排序算法是一種特殊的變序型算法,它們也改變元素的順序.但它們更複雜,也花費更多時間
如果要考慮對所有元素排序,可考慮以下算法:
sort()
:采用快速排序算法,保證了很好的平均效能,複雜度為n x log(n)
sort()
partial_sort()
:一般采用的是堆排序算法,在任何情況下保證n x log(n)的複雜度,然而很多實際情況中比堆排序比快速排序慢2~5倍.
partial_sort()
partial_sort()
的優點是它在任何時候都保證n x log(n)複雜度,絕不會變成二次複雜度,
partial_sort()
而 sort()
在最差情況下有可能程式設計二次複雜度
sort()