STL學習筆記(演算法概述)

2022-05-02 22:57:10 字數 2288 閱讀 2745

演算法標頭檔案

要運用c++標準程式庫的演算法,首先必須包含標頭檔案

使用stl演算法時,經常需要用到仿函式以及函式配接器。它們定義域標頭檔案中。

演算法的分類

可以按以下分類方式描述各個stl演算法:

非變動性演算法(nonmodifying algorithms)

變動性演算法(modifying algorithms)

移除性演算法(removing algorithms)

變序性演算法(mutating algorithms)

排序演算法(sorting algorithms)

已序區間演算法(sorted range algorithms)

數值演算法(numeric algorighms)

非變動性演算法

非變動性演算法既不改變元素次序,也不改變元素值。它們透過input迭代器和forward迭代器完成工作,因此可作用於所有標準容器身上。

下表展示c++彼岸準程式庫涵蓋的所有非變動性演算法:

最重要的演算法之一便是for_each(),它將呼叫者提供的操作施加於每乙個元素身上。例如可以用for_each()來列印區間內的每個元素。

for_each()也可以用來變動元素(如果傳給它的操作行為會變動元素值的話),所以也可以說是變動性演算法。

變動性演算法

變動性演算法,要不直接改變元素值,要不就是在複製在另一區間的過程中改變元素值(原區間不會發生變化)。

關聯式容器的元素被視為常數,在變動元素的時候可能會違反容器的排序準則。因此變動性演算法的目標區間不能是關聯式容器。

下標列出了c++標準程式庫涵蓋的變動性演算法。

最基本的變動性演算法時for_each()和transform()。兩者都可以變動序列中的所有元素值。他們的行為有以下不同點:

for_each()接受一項操作,該操作可變動其引數。因此該引數必須以by reference方式傳遞。例如:

void square(int&elem)        //call by reference

...for_each(coll.begin(),coll.end(), //range

square); //operation

transform()運用某項操作,該操作返回被改動後的引數。所以可以被用來將結果複製給原元素,例如:

int square(int elem)   //

call by value

...

transform(coll.begin(),coll.end()

//source range

coll.begin(), //

destination range

square); //

operation

移除性演算法移除性演算法是一種特殊的變動性演算法。他們可以移除某區間內的元素,也可以在賦值過程中執行移除動作。

與變動性演算法類似,移除性演算法的目標區間也不能使關聯式容器。下表列出c++標準程式庫涵蓋的所有移除性演算法:

移除演算法只是在邏輯上移除元素。使用的手段是:將不需將移除的元素往前覆蓋應被移除的元素。

因此它並不改變操作區間內的元素個數,而是返回邏輯上的新終點位置。

變序性演算法

所謂變序性演算法,是透過元素值的賦值和交換,改變元素順序(但不改變元素值)。和變動性演算法一樣,變序性演算法也不能以關聯式容易作為目標。

下表列出了c++標準程式庫涵蓋的所有變序性演算法:

排序演算法

排序演算法是一種特殊的變序性演算法。下表列出c++標準程式庫中所有的排序演算法:

已序區間演算法

所謂已序區間演算法,是指其所作用的區間在某種排序準則下已序。下表列出c++標準程式庫中涵蓋的所有已序區間演算法。

數值演算法

數值演算法以不同方式組合數值元素。下表列出c++標準程式涵蓋的所有數值演算法:

關於演算法的使用跟例子將在後面詳細討論

C 學習筆記 STL概述

c 語言的核心優勢就是便於軟體的重用。c 中有兩個方面體現重用 1.物件導向的思想 繼承和多型,標準類庫 2.generic programming 泛型程式設計 的思想 模板機制以及標準模板庫 stl 也就是說使用模板的程式設計。stl standard template library 就是一些...

STL演算法概述

除了容器類和迭代器,stl還提供了一些通用的演算法與容器類的元素工作。這些讓你做的事情,如搜尋,排序,插入,重新排序,刪除,複製元素的容器類。請注意,作為全球性的功能,操作使用迭代器演算法的實現。這意味著,每個演算法只需要實現一次,它一般會自動工作,提供了一組迭代器 包括自定義的容器類 的所有容器。...

STL學習筆記15 演算法

演算法庫定義了用來實現各種功能的函式 如查詢 排序 計數 修改等 都是針對指定範圍內元素的操作。需要注意的是,元素的範圍以 first,last 的形式指定,其中 last 指的是範圍內最後乙個元素的下乙個元素。在標頭檔案 中定義。for each 對每個元素執行某個操作 count 返回某元素的數...