第十二章 泛型演算法 (上)

2021-07-04 17:49:32 字數 1909 閱讀 4411

在使用標準庫當中的演算法時,記得要包含#include標頭檔案,在學習演算法的時候個人感覺主要了解到演算法實現的功能和他所需要的引數即可使用演算法了。

下面主要介紹課本中提到的標準庫演算法

1.唯讀演算法:find和accumulate演算法(該演算法在#include標頭檔案中)。accumulate(vec.begin(),vec.end(),value)是將容器中所有的元素累加,並且加上處置value。函式帶有三個引數,頭兩個引數指定累加的範圍,最後乙個引數指定累加的初值。

標準庫也定義了find_first_of演算法(類似於string中的find演算法一樣),該演算法是帶有兩對迭代器引數來標記兩段元素的範圍,在第一段元素的範圍內查詢第二段元素中任意元素匹配的元素,然後返回乙個迭代器,指向在第一段範圍內第乙個匹配的元素。如果找不到,則返回第一段範圍的end迭代器。如

list::iterator it=find_first_of(ilist.begin(),ilist.end(),ilist1.begin(),ilist1.end());

2.寫入元素的演算法:將輸入序列寫入容器中,fill演算法和fill_n演算法,copy演算法以及演算法的_copy版本

fill(vec.begin(),vec.end(),value)fill演算法帶有三個引數,頭兩個是一對迭代器,用於指定要寫入的範圍,而所寫的值是它的第三個引數value。即將該範圍內所有的元素都設為value。

fill_n(vec.begin(),occur,value)fill_n演算法帶有兩個引數,第乙個是乙個迭代器用來指定開始要寫入的位置,第二個是乙個計數器,用來指定寫入元素的個數,第三個則是用來寫入的值,即將occur個value從迭代器標記的開始的位置開始寫入。

注意:這裡有乙個問題需要注意一下,就是在寫入的目標容器中不能為空,如果為空就會出錯,在這個情況下我們可以採用插入迭代器來解決這個問題,即back_inserter()。

copy(vec.begin(),vec.end(),back_inserter(vec1)),copy演算法帶有三個迭代器引數,頭兩個是指定輸入範圍,第三個是指向目標序列的乙個元素,即是將輸入範圍的元素複製到從指定位置的迭代器開始的目標當中。

演算法的_copy版本  是將相應範圍的元素複製到另乙個各容器當中去,並且可以做相應的改變

如:replace_copy(vec.begin(),vec.end(),back_insert(vec1),value1,value2); 該演算法帶有五個引數,演算法的功能是將頭兩個迭代器引數指定的範圍的元素,複製到通過插入迭代器的方式的容器中,在複製的過程中,如果遇到有value1的值得時候就用value2來替換。

3.對元素的排序演算法:

sort演算法:sort(vec.begin(),vec.end())sort演算法帶有兩個迭代器引數,就是用來指定需要排序的範圍,即將該範圍的元素按照字典或者小於的順序排序。

unique演算法:unique(vec.begin(),vec.end())unique演算法帶有兩個迭代器引數,用來指定元素的範圍,功能是將範圍內的元素中刪除相鄰重複的元素,然後重新排列輸出範圍內的元素,並且返回乙個迭代器,指向無重複的值範圍的結束位置(即最後乙個無重複元素的下乙個位置)。注意:unique演算法並沒有真正刪除重複的元素,只是把無重複的元素複製到序列的前端,從而覆蓋了相鄰的元素。

4.需要用到謂詞函式的的演算法

(1)排序演算法:stable_sort(vec.begin(),vec.end(),isshorter)stable_sort演算法帶有三個引數,前兩個是迭代器引數,用來指定排序的範圍,isshorter是謂詞函式,為此函式返回乙個bool型別的值,用來判斷是否滿足謂詞函式,即按照謂詞函式來排序。

count_if(vec.begin(),vec.end(),gt6)count_if演算法帶有三個引數,頭兩個是迭代器引數,用來指定需要統計元素的範圍,gt6是謂詞函式。即按照謂詞函式來統計。此演算法返回乙個size_type的型別值,表示滿足條件的個數。

第十二章 泛型

源 保護 型別安全 更加清晰的 更佳的效能.減少裝箱和拆箱的操作 c 的標準模板庫的部分集合類 開放型別和封閉型別乙個泛型的所有型別實參傳遞的都是實際的資料型別,則成為封閉型別.具有泛型型別引數的型別成為開放型別,clr禁止構造開放型別的例項.類似禁止構造介面例項.如 var t typeof di...

第十二章 檔案

文字檔案 文字檔案是一種由若干字元構成的檔案,可以用文字編輯器進行閱讀或編輯。以txt py html等為字尾的檔案都是文字檔案。2.二進位制檔案 二進位制檔案一般是指不能用文字編輯器閱讀或編輯的檔案。以 mp4 png等為字尾的檔案都是二進位制檔案,如果想要開啟或修改這些檔案,必須通過特定軟體進行...

第十二章 dp

動態規劃策略 將原始問題拆分為多個子問題,將子問題結果記錄,方便復用子問題的解 遞迴 記憶化 遞推 是動態規劃的一體兩面,本質都是一樣的 遞推減少了呼叫次數,空間上還能優化,一般選擇遞推方式 遞迴 記憶化 int memo maxn 將o 2 n o n intfibonacci int n 遞推 ...