C 基礎教程物件導向(學習筆記(93))

2021-09-02 18:34:16 字數 1112 閱讀 3929

除了容器類和迭代器之外,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...