#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...