除了容器類和迭代器之外,stl還提供了許多用於處理容器類元素的通用演算法。這些允許您執行諸如搜尋,排序,插入,重新排序,刪除和複製容器類的元素之類的操作。
請注意,演算法是作為使用迭代器操作的全域性函式實現的。這意味著每個演算法只需要實現一次,它通常會自動適用於提供一組迭代器(包括自定義容器類)的所有容器。雖然這非常強大並且能夠快速編寫複雜**,但它也有乙個糟糕的一面:演算法和容器型別的某些組合可能不起作用,可能導致無限迴圈,或者可能工作,但效能極差。因此,冒風險使用這些。
stl提供了相當多的演算法,我們只會在這裡觸及一些更常見且易於使用的演算法。其餘的(以及完整的細節)將儲存為stl演算法的章節。
要使用任何stl演算法,只需包含演算法標頭檔案。
min_element和max_element
min_element和max_element演算法在容器類中查詢min和max元素:
#include #include #include int main()
列印:
0 5find(和list :: insert)
在這個例子中,我們將使用find()演算法在列表類中查詢乙個值,然後使用list :: insert()函式在該點向列表中新增乙個新值。
#include #include #include int main()
這將列印該值
0 1 2 8 3 4 5
排序和反轉
在這個例子中,我們將對向量進行排序,然後將其反轉。
#include #include #include int main()
這會產生結果:
-5 -3 0 2 4 6 7
7 6 4 2 0 -3 -5
請注意,sort()不適用於列表容器類 ,列表類提供了自己的sort()成員函式,這比泛型版本更有效。
conclusion:
雖然這只是stl提供的演算法的一種嘗試,但它應該足以說明它們與迭代器和基本容器類一起使用是多麼容易。還有足夠的其他演算法來填滿整章!
C 基礎教程物件導向(學習筆記5(2))
在編寫具有多個建構函式的類 大多數建構函式 時,必須為每個建構函式中的所有成員指定預設值會導致冗餘 如果更新成員的預設值,則需要觸控每個建構函式。從c 11開始,可以直接為普通類成員變數 不使用static關鍵字的變數 提供預設初始化值 class rectangle void print int ...
C 基礎教程物件導向(學習筆記(23))
過載一元運算子 與您目前看到的運算子不同,正 負 和邏輯非 運算子都是一元運算子,這意味著它們只能在乙個運算元上執行。因為它們僅對它們所應用的物件進行操作,所以通常將一元運算子過載實現為成員函式。所有三個運算元都以相同的方式實現。讓我們看一下我們如何在前面的例子中使用的cents類上實現operat...
C 基礎教程物件導向(學習筆記(24))
過載比較運算子相對簡單,因為它們遵循我們在過載其他運算子時看到的相同模式。因為比較運算子都是不修改左運算元的二元運算子,所以我們將使過載的比較運算子宣告為友元函式。這是乙個帶有過載運算子 和operator!的car類的示例。include include class car friend bool...