定義於標頭檔案< numeric>
template
<
class
inputit
,class
t>
constexpr t accumulate
( inputit first, inputit last, t init )
;
template
<
class
inputit
,classt,
class
binaryoperation
>
constexpr t accumulate
( inputit first, inputit last, t init, binaryoperation op )
;
計算給定值 init 與給定範圍 [first, last) 中元素的和。第一版本用 operator+ ,第二版本用二元函式 op 求和元素,均將 std::move 應用到其左側運算數 (c++20 起)。
op 必須不非法化涉及範圍的任何迭代器,含尾迭代器,且不修改其所涉及範圍的任何元素及 *last 。(c++11 起)
引數first, last -要求和的元素範圍
init -和的初值
op -被使用的二元函式物件。接收當前積累值 a (初始化為 init )和當前元素 b 的二元運算子。
該函式的簽名應當等價於:
ret fun
(const type1 &a,
const type2 &b)
;
被使用的二元函式物件。接收當前積累值 a (初始化為 init )和當前元素 b 的二元運算子。
該函式的簽名應當等價於:
ret fun(const type1 &a, const type2 &b);
簽名中並不需要有 const &。
型別 type1 必須使得 t 型別的物件能隱式轉換到 type1 。型別 type2 必須使得 inputit 型別的物件能在解引用後隱式轉換到 type2 。 型別 ret 必須使得 t 型別物件能被賦 ret 型別值。
型別要求
inputit 必須滿足遺留輸入迭代器 (legacyinputiterator) 的要求。
t 必須滿足可複製賦值 (copyassignable) 和 可複製構造 (copyconstructible) 的要求。
返回值給定值與給定範圍中的元素的和。
給定範圍在 op 上左摺疊的結果 註解
std::accumulate 進行左摺疊。為進行右摺疊,必須逆轉二元運算子的引數順序,並使用逆序迭代器。
可能的實現
版本一
template
<
class
inputit
,class
t>
constexpr
// c++20 起
t accumulate
(inputit first, inputit last, t init)
return init;
}
版本二
template
<
class
inputit
,classt,
class
binaryoperation
>
constexpr
// c++20 起
t accumulate
(inputit first, inputit last, t init,
binaryoperation op)
return init;
}
示例#include
#include
#include
#include
#include
intmain()
;int sum = std::
accumulate
(v.begin()
, v.
end(),
0);int product = std::
accumulate
(v.begin()
, v.
end(),
1, std::multiplies<
int>()
);auto dash_fold =
(std::string a,
int b);
std::string s = std::
accumulate
(std::
next
(v.begin()
), v.
end(),
std::
to_string
(v[0])
,// 用首元素開始
dash_fold)
;// 使用逆向迭代器右摺疊
std::string rs = std::
accumulate
(std::
next
(v.rbegin()
), v.
rend()
, std::
to_string
(v.back()
),// 用首元素開始
dash_fold);
std::cout <<
"sum: "
<< sum <<
'\n'
<<
"product: "
<< product <<
'\n'
<<
"dash-separated string: "
<< s <<
'\n'
<<
"dash-separated string (right-folded): "
<< rs <<
'\n'
;}
輸出
sum:
55product:
3628800
dash-separated string:1-
2-3-
4-5-
6-7-
8-9-
10dash-separated string (right-folded):10
-9-8
-7-6
-5-4
-3-2
-1
C 的STL中accumulate的用法
所需的標頭檔案 include 可以用來計算特定範圍內所有元素的和 或者平均值。std vector vec points src 向量 size t num pts vec points src.size tmp 是向量vec points src內每一維的和 eigen vector3d tmp...
STL中accumulate的用法
accumulate定義在 include中,作用有兩個,乙個是累加求和,另乙個是自定義型別資料的處理 int sum accumulate vec.begin vec.end 累加的初始值 例 數值相加 int sum accumulate vec.begin vec.end 42 字串拼接 st...
c 中 的用法
c 中的 至少有以下幾種作用 1.忽略轉義字元 例如 string filename d 文字檔案 text.txt 使用 後 string filename d 文字檔案 text.txt 2.讓字串跨行 例如 string strsql select from humanresources.em...