STL函數中的小細節

隨便記記了。(不定期更新)

/---------------------------------------------------------------------------------------------------------/

reverse函數反轉的範圍是[first,last),所以包括first指向的元素,不包括last指向的元素。
而a.end()(a爲string)指向a最後一個字符的後一位。

/---------------------------------------------------------------------------------------------------------/

全排列:next_permutation()函數功能是輸出所有比當前排列大的排列,順序是從小到大。
而prev_permutation()函數功能是輸出所有比當前排列小的排列,順序是從大到小。

/---------------------------------------------------------------------------------------------------------/

unique的作用就是"去除"數組中重複的元素,unique去重的過程是把不重複的元素移到前面來,所以去重後數組會變。
而lower_bound( )和upper_bound( )都是利用二分查找的方法在一個排好序(前提)的數組中進行查找的。所以數組不會變。
它們都是返回地址(迭代器),所以都要減去首地址。

/---------------------------------------------------------------------------------------------------------/

max_element() 和 min_element():
1、第三個參數cmp可寫可不寫, max_element()和 min_element() 默認是從小到大排列,然後 max_element() 輸出最後一個值, min_element() 輸出第一個值,但是如果自定義的 cmp函數寫的是從大到小排列,那麼會導致 max_element() 和min_element() 的兩個結果是對調的。
2、可以用於結構體,string,vector等等,注意cmp從小到大排列。
3、不會改變原數組。
4、範圍同樣是[first,last),不包括last指向的元素。

/---------------------------------------------------------------------------------------------------------/

accumulate的3種用法:
1、累加求和:

int sum=accumulate(a.begin(),a.end(),0);

第三項爲初值。
2、累項相乘:加第四項multiplies<int>()
3、自定義數據類型的處理

struct node{	int id,num;	string k	};
node a[5];
int sum=accumulate(a,a+5,0,[](int x,node t){return x+t.num;});

/---------------------------------------------------------------------------------------------------------/

/---------------------------------------------------------------------------------------------------------/

面向新手:
switch中case與default
運算符&與&&,|與||的區別
Memset 初始化問題(至於fill函數和遍歷賦值沒什麼區別)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章