一、標頭檔案#include
這個頭函式為演算法標頭檔案,下面介紹演算法中的幾個基本函式
sort函式
這個函式是乙個排序函式,方法用於對陣列的元素進行排序,並返回陣列。
主要用法如下:sort(begin, end,排序方式)如果未填寫排序方式,預設從小到大排序。
倘若想要從大到小排序:sort(begin, end, cmp);
它使用的排序方法是類似於快排的方法,時間複雜度為n*log2(n),執行效率較高,極大方便了我們的**。
下面為大家附加乙個**:
#include #include #include using namespace std;
int main()
sort(a, a + 5);
sort(b.begin(), b.end());
for (int i = 0; i < 5; i++)
cout << a[i] << " ";
cout << endl;
for (int i = 0; i < 5; i++)
cout << b[i] << " ";
return 0;
}
上述**,可以輸入在int範圍內任意5個數字,程式會自動從小到大進行排序後輸出。
以及四個常用函式
①bool next_permutation(begin, end);
改變區間內元素的順序,產生下乙個排列。
②bool prev_permutation(begin, end);
產生前乙個排列。end為最後乙個元素的下乙個位置。
③upper_bound(begin, end, value);
返回》value的元素的第乙個位置。
④lower_bound(begin, end, value);
返回》=value的元素的第乙個位置。
上述四個函式都要注意在begin與end之間,都是左閉右開的區間形式,都在陣列中進行運用。
二、標頭檔案: #include
set 和 multiset會根據特定的排序準則,自動將元素排序,兩者的不同之處在於multiset可以允許元素重複而set不允許元素重複。
set如同在高中數學對於集合的定義,不允許重複的數字出現,如果在乙個陣列**現了多個相同的數字,set函式會自動排序清除相同元素(set的功能會經常運用在除重的題目中)
multiset與set函式不同,進行排序後不會清楚陣列中的相同元素,如果希望保留相同元素,可以進行運用。
定義:set set_name;
如:set s;//預設由小到大排序
如果想按照自己的方式排序,可以過載小於號、
set和multiset 簡單應用
操作:s.insert(elem) – 安插乙個elem副本,返回新元素位置。
s.erase(elem) – 移除與elem元素相等的所有元素,返回被移除 的元素個數。
s.erase(pos) – 移除迭代器pos所指位置上的元素,無返回值。
s.clear() – 移除全部元素,將整個容器清空。
s.size() – 返回容器大小。
s.empty() – 返回容器是否為空。
s.count(elem) – 返回元素值為elem的元素的個數。
s.lower_bound(elem) – 返回 元素值》= elem的第乙個元素位置。
s.upper_bound(elem) – 返回元素值 > elem的第乙個元素的位置。
以上位置均為乙個迭代器。
s.begin() – 返回乙個雙向迭代器,指向第乙個元素。
s.end() – 返回乙個雙向迭代器,指向最後乙個元素的下乙個位置。
迭代器舉例:
multiset :: iterator pos;
for(pos = s.begin(); pos != s.end(); pos++)
三、標頭檔案: #include
定義:map map_name;
如:map m;//預設按string由小到大排序
m.size() 返回容器大小
m.empty() 返回容器是否為空
m.count(key) 返回鍵值等於key的元素的個數
m.lower_bound(key) 返回鍵值等於key的元素的第乙個可安插 的位置
m.upper_bound(key) 返回鍵值等於key的元素的最後乙個可安 插的位置
m.begin() 返回乙個雙向迭代器,指向第乙個元素。
m.end() 返回乙個雙向迭代器,指向最後乙個元素的下乙個 位置。
m.clear() 講整個容器清空。
m.erase(elem) 移除鍵值為elem的所有元素,返回個數,對 於map來說非0即1。
m.erase(pos) 移除迭代器pos所指位置上的元素。
直接元素訪問:
m[key] = value;
查詢的時候如果沒有鍵值為key的元素,則安插乙個鍵值為key的新元素,實值為預設(一般0)。
m.insert(elem) 插入乙個元素elem
a)運用value_type插入
mapm;
m.insert(map:: value_type (「robin」, 22.3));
b) 運用pair<>
m.insert(pair(「robin」, 22.3));
c) 運用make_pair()
m.insert(make_pair(「robin」, 22.3));
四、在queue中存在乙個新的函式
優先佇列(priority_queue)
乙個擁有權值觀念的queue,自動依照元素的權值排列,權值最高排在前面。預設情況下,priority_queue是利用乙個max_heap完成的。
定義:priority_queue priority_queue_name;
如:priority_queue q;//預設是大頂堆
操作:q.push(elem) 將元素elem置入優先佇列
q.top() 返回優先佇列的下乙個元素
q.pop() 移除乙個元素
q.size() 返回佇列中元素的個數
q.empty() 返回優先佇列是否為空
在優先佇列中最要注意的是,在優先隊中,不一定是單調的!但是可以在短時間內找到佇列中最大數值或者最小數值。
C STL專題總結
stl是acm第乙個學習的知識,總體來說與優秀的同學有著特別的的差距,自己也會繼續加油,繼續縮小與他們的差距,不會懈怠!下列是stl專題裡所有出現的標頭檔案及相應的函式。棧 stack 標頭檔案 include stackstack name 如 stack s 操作 empty 返回bool型,表...
C STL中的函式
標頭檔案 algorithm 中有很多好用的函式 max a,b 返回a和b中的最大值,引數可以是浮點數 min a,b 返回a和b中的最小值,引數可以是浮點數 tolower char ch 將字元型變數ch的大寫轉換為小寫,其他不變 toupper char ch 將字元型變數ch的小寫轉換為大...
C STL 排序函式
c 的寫法 sort和stable sort可對原生陣列 stl容器排序,sort採用快排實現,不穩定,stable sort採用歸併排序實現,穩定,時間複雜度均為n log n 一般排序 sort stable sort在中 函式原型 void sort ranit first,ranit las...