c++primer——第十章泛型演算法所提到的函式總結
泛型演算法定義:
泛型因為他們可以用於不同型別的元素和多種容器型別(不僅包括標準庫型別,還包括內建的陣列型別),以及我們將看到的,還能用與其他型別的序列。
演算法因為他們實現了一些經典演算法的公共介面。
本章所介紹的幾個函式
1、find:定義在標頭檔案algorithm中,有三個引數,其中前兩個至少為輸入迭代器(指標),第三個引數是一個值。他返回第一個等於給定值元素的迭代器。從第一個引數開始尋找,如果沒有找到,則返回其第二個引數。也就是說第二個引數來表示搜素失敗。
eg: auto result = find( vec.begin(), vec.end(), 0);
2、find_if:定義在標頭檔案algorithm中,呼叫返回一個迭代器,查詢一個滿足條件的元素,若不存在,返回第二個引數。
eg: auto result = find_if( vec.begin(), vec.end(), [sz](const string &a){return a.size() >= sz;});
此處涉及到lambda表示式。
3、count:定義在標頭檔案algorithm中,類似於find,接受一對迭代器和一個值作為引數。返回給定製在序列中出現的次數。
eg: cout << count( vec.begin(), vec.end(), 0);
4、accumulate:定義在標頭檔案numeric中。只讀演算法,接受三個引數,前兩個表示範圍與find類似,第三個引數是和的初值。例中將sum設定為vec中元素的和。
eg:int sum = accumulate( vec.begin(), vec.end(), 0);
5、equal:定義在標頭檔案algorithm中,只讀演算法,接受三個迭代器,前兩個表示第一個序列的元素範圍,第三個表示第二個序列的首元素。他將第一個序列中的每個元素與第二個序列中的對應元素進行比較。如果所有元素都對應相等返回true,否則返回false。(容器型別以及元素型別都不必一樣,但第二個序列至少與第一個序列一樣長)
eg:equal(roster1.cbegin(), roster1.cend(), roster2.cbegin());
6、fill:定義在標頭檔案algorithm中,接受三個引數,前兩個為一對迭代器,表示範圍,第三個為一個值,fill將這個值賦予輸入序列中的每個元素。
eg:fill(vec.begin(), vec.end(), 0);
7、fill_n:定義在標頭檔案algorithm中,接受一個單迭代器,一個計數值和一個值。它將給定值賦予迭代器指向的元素開始的指定個元素。
eg:fiil_n(vec.begin(), vec.size(), 0);
8、copy:定義在標頭檔案algorithm中,接受三個迭代器,前兩個表示一個輸入範圍,第三個表示目的序列的起始位置。該演算法是向目的位置迭代器指向的輸出序列中的元素寫入資料的演算法。他將輸入範圍內的元素拷貝到目的序列中。(傳遞給copy的目的序列至少要包含於輸入序列一樣多的元素,必須初始化或者使用back_inserter插入)。返回的是其目的位置迭代器(遞增後)的值。
eg:auto ret = copy(vec.begin(), vec.end(), back_inserter(ivec));
9、replace:定義在標頭檔案algorithm中,接受四個引數,前兩個是迭代器,表示輸入序列,後兩個一個是要搜尋的值,另一個是新值。他將所有等於第一個值的元素替換成為第二個值。
eg:replace(ilst.begin(), ilst.end(), 0, 42);
10、replace_copy:在replace基礎上,如果我們想保持原序列不變,可以呼叫replace_copy。此演算法接受額外第三個迭代器引數,指出調整後序列的儲存位置。下例中呼叫後,ilst並未改變,ivec包含ilst的一份拷貝,不過原來在ilst中值為0的元素在ivec中變為42。
eg:replace_copy(ilst.begin(), back_inserter(ivec), 0, 42);
11、sort:定義在標頭檔案algorithm中,sort演算法接受兩個迭代器,表示要排序的元素範圍。
eg:sort(words.begin(), words.end());
12、stable_sort:定義在標頭檔案algorithm中,一種穩定排序演算法維持相等元素的原有順序。可以保持登場元素間的字典序。
eg:stable_sort(words.begin(), words.end(), isShoter);
此處isShoter是一個二元謂詞。
13、unique:演算法重排輸入序列,將相鄰的重複”消除“,並返回一個指向不重複值範圍末尾的迭代器。實際並未刪除,末尾還存在一些未知元素,需要使用erase刪除。接受一對迭代器表示範圍。
eg:auto end_unique = unique(words.begin(), words.end());
14、for_each:此演算法接受一個可呼叫物件,並對輸入序列中的每個元素呼叫此物件。
eg:for_each(wc, words.end(), [](const string &s) {cout << s << " ";});
15、transform:定義在標頭檔案algorithm中,接受三個迭代器和一個可呼叫物件。前兩個迭代器表示目的位置,第三個迭代器表示目的位置。演算法對輸入序列開始位置的迭代器呼叫可呼叫物件,並將結果寫到目的位置。目的位置迭代器與表示輸入序列開始位置的迭代器可以是相同的。當輸入迭代器和目的迭代器相同時,transform將輸入序列中每個元素替換為可呼叫物件操作該元素得到的結果。
eg:transform(vi.begin(), vi.end(), vi.begin(), [](int i){return i < 0 ? -i : i;});
相關文章
- c++primer——第十章泛型演算法lambdaC++泛型演算法
- 泛型函式泛型函式
- 泛型總結泛型
- Java函式泛型List引數,操作泛型元素Java函式泛型
- Java泛型建構函式Java泛型函式
- Java知識點總結(Java泛型)Java泛型
- C 語言實現泛型 swap 函式泛型函式
- 在Golang中使用泛型reduce函式 - gosamplesGolang泛型函式
- php函式總結PHP函式
- Oracle 函式總結Oracle函式
- 總結常用的字串函式字串函式
- C# 泛型 new()建構函式約束C#泛型函式
- C++Primer 第六章 函式C++函式
- 第十六篇:泛型演算法結構泛型演算法
- 第十章 MySQL 常用函式MySql函式
- Java高階特性之泛型學習總結Java泛型
- 關於Java泛型深入理解小總結Java泛型
- spark中的聚合函式總結Spark函式
- JS 中的函式 this 指向總結JS函式
- mysql日期函式總結MySql函式
- PHP常用函式總結PHP函式
- Oracle常用函式總結Oracle函式
- php 常用函式總結PHP函式
- SQL Server函式總結SQLServer函式
- SAP ABAP 函式總結 常用函式解釋函式
- C++中的函式指標和函式物件總結C++函式指標物件
- [CUJ]泛型程式設計--轉移建構函式 (轉)泛型程式設計函式
- C++泛型演算法C++泛型演算法
- php 驗證格式的函式總結PHP函式
- oracle 與 mysql 中的函式總結OracleMySql函式
- Linux C 字串函式的總結Linux字串函式
- Sigmoid函式總結Sigmoid函式
- mysql函式全面總結KSVMMySql函式
- ORACLE 實用函式總結Oracle函式
- loadrunner常用函式總結函式
- 函式呼叫規則總結函式
- Oracle分析函式使用總結Oracle函式
- [28期] 字串函式總結字串函式