演算法標頭檔案
要運用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 referencetransform()運用某項操作,該操作返回被改動後的引數。所以可以被用來將結果複製給原元素,例如:...for_each(coll.begin(),coll.end(), //range
square); //operation
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 返回某元素的數...