C++程式設計必備神器STL——常用演算法
C++標準函式庫中,為我們提供了一個algorithm庫,裡面包含了十分多的常用演算法,下面我來做一個小小的總結
非修改序列操作
adjacent_find 查詢兩個相鄰(Adjacent)的等價(Identical)元素 all_of (C++11) 檢測在給定範圍中是否所有元素都滿足給定的條件 any_of (C++11) 檢測在給定範圍中是否存在元素滿足給定條件 count 返回值等價於給定值的元素的個數 count_if 返回值滿足給定條件的元素的個數 equal 返回兩個範圍是否相等 find 返回第一個值等價於給定值的元素 find_end 查詢範圍 A 中與範圍 B 等價的子範圍最後出現的位置 find_first_of 查詢範圍 A 中第一個與範圍 B 中任一元素等價的元素的位置 find_if 返回第一個值滿足給定條件的元素 find_if_not (C++11) 返回第一個值不滿足給定條件的元素 for_each 對範圍中的每個元素呼叫指定函式 mismatch 返回兩個範圍中第一個元素不等價的位置 none_of (C++11) 檢測在給定範圍中是否不存在元素滿足給定的條件 search 在範圍 A 中查詢第一個與範圍 B 等價的子範圍的位置 search_n 在給定範圍中查詢第一個連續 n 個元素都等價於給定值的子範圍的位置
修改序列操作
copy 將一個範圍中的元素拷貝到新的位置處 copy_backward 將一個範圍中的元素按逆序拷貝到新的位置處 copy_if (C++11) 將一個範圍中滿足給定條件的元素拷貝到新的位置處 copy_n (C++11) 拷貝 n 個元素到新的位置處 fill 將一個範圍的元素賦值為給定值 fill_n 將某個位置開始的 n 個元素賦值為給定值 generate 將一個函式的執行結果儲存到指定範圍的元素中,用於批量賦值範圍中的元素 generate_n 將一個函式的執行結果儲存到指定位置開始的 n 個元素中 iter_swap 交換兩個迭代器(Iterator)指向的元素 move (C++11) 將一個範圍中的元素移動到新的位置處 move_backward (C++11) 將一個範圍中的元素按逆序移動到新的位置處 random_shuffle 隨機打亂指定範圍中的元素的位置 remove 將一個範圍中值等價於給定值的元素刪除 remove_if 將一個範圍中值滿足給定條件的元素刪除 remove_copy 拷貝一個範圍的元素,將其中值等價於給定值的元素刪除 remove_copy_if 拷貝一個範圍的元素,將其中值滿足給定條件的元素刪除 replace 將一個範圍中值等價於給定值的元素賦值為新的值 replace_copy 拷貝一個範圍的元素,將其中值等價於給定值的元素賦值為新的值 replace_copy_if 拷貝一個範圍的元素,將其中值滿足給定條件的元素賦值為新的值 replace_if 將一個範圍中值滿足給定條件的元素賦值為新的值 reverse 反轉排序指定範圍中的元素 reverse_copy 拷貝指定範圍的反轉排序結果 rotate 迴圈移動指定範圍中的元素 rotate_copy 拷貝指定範圍的迴圈移動結果 shuffle (C++11) 用指定的隨機數引擎隨機打亂指定範圍中的元素的位置 swap 交換兩個物件的值 swap_ranges 交換兩個範圍的元素 transform 對指定範圍中的每個元素呼叫某個函式以改變元素的值 unique 刪除指定範圍中的所有連續重複元素,僅僅留下每組等值元素中的第一個元素。 unique_copy 拷貝指定範圍的唯一化(參考上述的 unique)結果
劃分
is_partitioned (C++11) 檢測某個範圍是否按指定謂詞(Predicate)劃分過
partition 將某個範圍劃分為兩組
partition_copy (C++11) 拷貝指定範圍的劃分結果
partition_point (C++11) 返回被劃分範圍的劃分點
stable_partition 穩定劃分,兩組元素各維持相對順序
排序
is_sorted (C++11) 檢測指定範圍是否已排序 is_sorted_until (C++11) 返回最大已排序子範圍 nth_element 部份排序指定範圍中的元素,使得範圍按給定位置處的元素劃分 partial_sort 部份排序 partial_sort_copy 拷貝部分排序的結果 sort 排序(快速排序) stable_sort 穩定排序
二分法查詢(用於已劃分/已排序的序列)
binary_search 判斷範圍中是否存在值等價於給定值的元素
equal_range 返回範圍中值等於給定值的元素組成的子範圍
lower_bound 返回指向範圍中第一個值大於或等於給定值的元素的迭代器
upper_bound 返回指向範圍中第一個值大於給定值的元素的迭代器
合併(用於已排序的序列)
includes 判斷一個集合是否是另一個集合的子集
inplace_merge 就緒合併
merge 合併
set_difference 獲得兩個集合的差集
set_intersection 獲得兩個集合的交集
set_symmetric_difference 獲得兩個集合的對稱差
set_union 獲得兩個集合的並集
堆
is_heap 檢測給定範圍是否滿足堆結構
is_heap_until (C++11) 檢測給定範圍中滿足堆結構的最大子範圍
make_heap 用給定範圍構造出一個堆
pop_heap 從一個堆中刪除最大的元素
push_heap 向堆中增加一個元素
sort_heap 將滿足堆結構的範圍排序
最大/最小值
is_permutation (C++11) 判斷一個序列是否是另一個序列的一種排序
max 返回兩個元素中值最大的元素
max_element 返回給定範圍中值最大的元素
min 返回兩個元素中值最小的元素
min_element 返回給定範圍中值最小的元素
minmax (C++11) 返回兩個元素中值最大及最小的元素
minmax_element (C++11) 返回給定範圍中值最大及最小的元素
其他
lexicographical_compare 比較兩個序列的字典序
next_permutation 返回給定範圍中的元素組成的下一個按字典序的排列
prev_permutation 返回給定範圍中的元素組成的上一個按字典序的排列
最後給大家推薦一個很好的C++網站,裡面有學習資源、參考資源等,十分強大,各種庫,各種庫函式的原型及示例都有,只不過是英文,但是都寫的很簡潔,很好理解
http://www.cplusplus.com/
相關推薦
C++程式設計必備神器STL——常用演算法
C++標準函式庫中,為我們提供了一個algorithm庫,裡面包含了十分多的常用演算法,下面我來做一個小小的總結 非修改序列操作 adjacent_find 查詢兩個相鄰(Adjacent)的等價(Identical)元素 all_of (C++11
C++ STL 常用演算法
標準庫定義了一組泛型演算法:因為它們實現共同的操作,所以稱之為“演算法”;而“泛型”指的是它們可以操作在多種容器型別上,不但可作用於標準庫型別,還可用在內建陣列型別、甚至其他型別的序列上。大多數演算法
STL常用演算法
簡介 STL演算法部分主要由標頭檔案, , 組成。要使用STL中的演算法函式,必須包含標頭檔案,對於數值演算法必須包含。中則定義了一些模板類,用來宣告函式物件(又名仿函式)。 STL中演算法大致分為四類: 不改變序列演算法:指不直接修改其所操作的容器內容的演算
C++ 之高效使用STL(查詢演算法的選擇)
你要尋找什麼,而且你有一個容器或者你有一個由迭代器劃分出來的區間——你要找的東西就在裡面。你要怎麼完成搜尋呢?你箭袋中的箭有這些:count、count_if、find、find_if、binary_search、lower_bound、upper_bound和equal_
C中的幾個常用演算法
/*一般查詢法*/{ int i; if( size <= 0 ) return -1; for( i = 0; i < size; ++i ) if( date == array[i] ) return i; return -1;} void s
Linux環境下C程式設計指南---gcc 編譯器常用的命令列引數一覽
1. gcc -E source_file.c-E,只執行到預編譯。直接輸出預編譯結果。2. gcc -S source_file.c -S,只執行到原始碼到彙編程式碼的轉換,輸出彙編程式碼。3. gcc -c source_file.c-c,只執行到編譯,輸出目標檔案。4. gcc (-E/S/c/) so
幾種程式設計題高難度常用演算法總結
筆試的程式設計題總是很頭疼,怕的有思路編不出來,作為一個半路出家健忘者,不得不記錄一些見得比較多的演算法,相信對以後筆試的程式設計題會有大大的幫助,話不多說,開始。 1.窮舉法 全排列: 比如一個
C++標準模板庫(STL):常用演算法
find() ---algorithm中的函式 find(start,end,value) start搜尋的起點,end搜尋的終點,要尋找的value值 容器的表示方法(只有vector沒有內建find()函式,其他容器都有,其他容器用自己的find()
C++ STL 常用遍歷算法
算法的輸入 解耦 定義 數據 ima last first 有效 遍歷算法 C++ STL 常用遍歷算法 STL的容器算法叠代器的設計理念 1) STL的容器通過類模板技術,實現數據類型和容器模型的分離 2) STL的叠代器技術實現了遍歷容器的統一方法;也為STL的算
C++ STL 常用算術和生成算法
算法 push ren ack ntc enc sum push_back acc C++ STL 常用算術和生成算法 accumulate() accumulate: 對指定範圍內的元素求和,然後結果再加上一個由val指定的初始值。 #include<numer
程式設計思想 - 五大常用演算法詳解
https://www.cnblogs.com/brucemengbm/p/6875340.html https://blog.csdn.net/changyuanchn/article/details/51476281 https://www.cnblogs.com/chuninggao/p/
C++程式設計常用程式碼
計時: #include<chrono> chrono::steady_clock::time_point t1=chrono::steady_clock::now(); //do something chrono::steady_clock::time_point t2=chron
C程式設計--VC++6.0的使用(常用快捷鍵)
VC++預設沒有設定開啟/關閉工作區和開啟/關閉輸出區的快捷鍵,我們可以自己註冊。 註冊方法:Tools ——> Customize ——> KeyBoard 編輯常用鍵 Ctrl+N New新建工程 Ctrl+O Open開啟檔案 Alt+F3/
C++程式設計練習——巴比倫演算法求平方根
#include<iostream> using namespace std; int main() { double n, r, last_guess, new_guess; cout << "Which number you w
C#程式設計基礎第十課:C#中的常用資料型別轉換:隱式轉換、顯式轉換、Convert類轉換等
知識點:型別轉換、數值型別間的轉換、隱式型別轉換、顯式型別轉換、數值型別和string型別的轉換、Convert類轉換。 1、資料型別型別轉換 理解:從根本上說是型別鑄造,或者說是把資料從一種型別轉換為另一種型別。C#有多種資料型別,在使用各種型別的資料時,有時候需要將一種型別的資料轉換
程式設計常用演算法分析——洗牌演算法
首先我們需要明白幾個數學思想—————————————— 一、 我們的洗牌演算法是偽隨機事件的一種。而隨機事件我們也要明白幾個概念 隨機數的特性: 隨機性:不存在統計學偏差,是完全雜亂的數列 不可預測性:不能從過去的數列推測出下一個出現的數 不可重現性:除
北京大學MOOC C++程式設計 程式設計與演算法(三)第三週測驗
1:返回什麼才好呢 程式填空,使其按要求輸出 #include <iostream> using namespace std; class A { public: int val; A(int // 在此處補充你的程式碼 }; int main()
北京大學MOOC C++程式設計 程式設計與演算法(三)第四周測驗
1:MyString 補足MyString類,使程式輸出指定結果 #include <iostream> #include <string> #include <cstring> using namespace std; class M
北京大學MOOC C++程式設計 程式設計與演算法(三)第七週測驗
1:簡單的SumArray 描述 填寫模板 PrintArray,使得程式輸出結果是: TomJackMaryJohn 10 不得編寫SumArray函式 #include <iostream> #include <string> using n
C++程式設計案例教程——Cha8 模板和STL 總結
模板是C++的一個語言特性,是實現引數多型的方法,也是C++實現泛型程式設計的重要機制。模板使程式設計使可以快速建立具有型別安全的類庫和函式的集合。函式中的引數多型稱為函式模板,類中的引數多型稱為類模板,而STL標準模板庫也正式成為標準C++庫的一部分,