STL之演算法

2021-08-02 17:02:00 字數 1060 閱讀 4255

演算法是指解決問題的方****而完整的描述,對於規範的輸入,在有限時間內要獲得所需要的輸出。不同的演算法可能使用不同的時間、空間或效率完成同樣的任務。

想要評估乙個演算法的好壞,目前可以通過時間複雜度和空間複雜度來進行衡量。

時間複雜度,是指演算法執行指令所需的計算量。演算法的執行時間和其所要處理的資料之間存在某種函式關係,當資料量足夠大時,只有最高次方的專案才具有主導地位。目前我們使用big-o標記法,例如對於單次for迴圈的時間複雜度可以表示為o(n),雙次for迴圈的時間複雜度可以表示為o(n*n),以此類推。

空間複雜度,是指演算法執行過程中臨時占用的儲存空間的大小的度量,其表示方法與時間複雜度一致。

乙個演算法的時間複雜度和空間複雜度往往是相互影響的,當降低一方的複雜度時,另一方的複雜度就會增加,因為在設計演算法時,需要根據實際需求進行取捨,綜合進行考慮。

根據應用於演算法的資料在演算法前後的變化,可將演算法分為質變演算法和非質變演算法。

質變演算法,是在演算法過程中會更改輸入資料內部的元素內容,例如排序演算法,因而不可作用於常數區間。

非質變演算法,是在演算法過程中不改輸入資料內部的元素內容,例如查詢演算法。

在設計演算法時,演算法的輸入引數若是特定型別,則針對不同的引數型別,需要實現不同的介面,不利於演算法的復用。stl為了解決這一問題,設計了迭代器這一物件。不同資料型別的迭代器,需要實現相同的介面,可供演算法內部進行呼叫,從而實現演算法的泛化。

stl提供的演算法,都是採用一對迭代器來標識演算法的操作區間。為了保證演算法最大的公用性,迭代器定義為演算法所需的最低程度的型別。將無效的迭代器傳給演算法,會導致錯誤,但卻不能保證在編譯時期就可**捉出來。

stl提供的演算法,雖然進行了泛化,但還是提供了多個不同的版本,以針對不同的需求。有的是以函式過載的方式,如unique()預設使用quality進行比較,也可以由使用者傳入乙個仿函式進行比較的操作;有的是直接使用不同的函式名進行定義,如find和find_if、replace和replace_copy等。

stl設計演算法時,力求做到與資料進行分離,實現最大限度的通用。在演算法內部,也使用各種技巧,以達到最好的演算法效率。提供給使用者的介面都是簡單易用的,演算法本身的穩定性也是很***的,大大減輕開發人員的工作量。

STL演算法之for each

轉接自stl演算法 for each 對區間裡每個元素執行相應操作 注 for each 接受乙個操作,操作可改動所接受實參 所以該實參必須以by reference方式傳遞 include include include using namespace std for each 對區間裡每個元素執...

STL之排序演算法

1.merge 以下是排序和通用演算法 提供元素排序策略 merge 合併兩個有序序列,存放到另乙個序列。例如 vecinta,vecintb,vecintc是用vector宣告的容器,vecinta已包含1,3,5,7,9元素,vecintb已包含2,4,6,8元素 vecintc.resize ...

STL之排序演算法

以下是排序和通用演算法 提供元素排序策略 merge 合併兩個有序序列,存放到另乙個序列。例如 vecinta,vecintb,vecintc是用vector宣告的容器,vecinta已包含1,3,5,7,9元素,vecintb已包含2,4,6,8元 vecintc.resize 9 擴大容量 me...