STL常用數值演算法

2021-07-10 15:07:32 字數 1584 閱讀 6685

#include#include#include#include#include#include#includeusing namespace std;

//數值演算法

/*accumulate 累加或者類乘

partial_sum 區域性求和

fill fill_n 填充 初始化時使用方便

equal判斷兩區間是否相等

for_each 相當於for迴圈

copy 這個函式用法實在太多

還有一些很簡單的數值演算法 並未列出

*/templateclass display

};int main(void)

; int len = sizeof(a) / sizeof(a[0]);

vectorvec(a,a+len);

cout << accumulate(vec.begin(),vec.end(),0)<())o_ite oite(cout," ");

partial_sum(a,a+3,oite);//5 6 9區域性求和 第n個元素為前n個元素的總和 用在map裡很好

cout<());//一堆 亂值

fill(a1,a1+10,-1);

puts("");

for_each(a1,a1+10,display());//全部為 -1

fill_n(a1,5,0);//從迭代器開始位置 填充 5個 0

//返回的迭代器 指向最後乙個被填充的下乙個位置

puts("");

for_each(a1, a1 + 10,display());//全部為 -1

iter_swap(a,a1);//這個和c中的使用指標交換 一樣 在不同物件的迭代器 也可以使用

swap(*a,*a1);//c++的引用交換方式

puts("");

for_each(a1, a1 + 10, display());//一堆 亂值

//這個函式 很奇怪 必須保證第二個區間的元素長度大於等於 第乙個區間 否則出錯

//函式只保證在該區間 兩個序列相同 所以要完全相等 必須 同時判斷長度

bool bflag=equal(a,a+len,vec.begin());

if (bflag)

//copy 函式效率很高 使用很頻繁

int *paraa = new int[vec.size()]();

copy(vec.begin(), vec.end(), a);

//輸出區間的起點 與輸入區間重疊 可能會出問題(其它情況是不會的)

//copy 會根據迭代器的性質來決定呼叫哪個版本的copy

//對於原生指標 會呼叫memmove 其它型別會執行實際拷貝操作

//vector 的指標不僅是個randomiterator 而且是個 t* 因此 拷貝時會使用 memmove

//與copy類似的還有 copy_backward 只不過 是將乙個區間的元素 逆向複製到另乙個區間(也是逆向拷貝)

for_each(a,a+vec.size(),display());

return 0;

}

stl 數值演算法

該函式用於累計指定區間的資料,也可以由使用者指定操作,而不一定是加法,其實現如下 對區間 first,last 進行加和操作,init為提供的初始值 template tp accumulate inputiterator first,inputiterator last,tp init binar...

STL之數值演算法

必須包含標頭檔案 include include include include include ostream iterator using namespace std int main vectoriv ia,ia 5 cout accumulate iv.begin iv.end 0 endl...

STL常用演算法

stl常用演算法 1 sort sort v.begin v.end 2 unique auto end unique unique begin vec1 end vec1 去掉連續重複的元素。vec1.erase end unique,vec1.end 3 string相關的操作 char c a...