我在C++中尋找一個函數,以返回數組中所有元素的求和,類似於我們在Matlab中的求和,即求和(A),其中A是一個數組。 我知道可以簡單地做一個for循環,但沒有任何功能,例如在「std ::」?C++:哪些函數給出了數組的總和?
回答
該功能被稱爲std::accumulate
,並駐留在<numeric>
。
它可以與標準庫容器(能夠提供InputIterator
,幾乎所有其中一個)和C風格的陣列一起使用 - 前提是您使用的是std::begin
和std::end
。否則container.begin()/end()
當然是好的;請參閱示例使用以獲取更多信息。
有一點要注意的是,它提供了兩個重載,其中一個增加了一個BinaryOperation
。它在其他版本中默認爲std::plus
。這在實踐中意味着它變成了其他語言的fold
或reduce
。
使用C語言風格的陣列,由@BoBTFish提供的一個例子 - ideone link。
#include <iostream>
#include <iterator>
#include <numeric>
int main()
{
int nums[] = {1,5,3,2,7,8,100,3};
std::cout
<< std::accumulate(std::begin(nums),
std::end(nums),
0)
<< '\n';
}
的
「專門用於C風格的陣列」? [哪兒?](http://en.cppreference.com/w/cpp/algorithm/accumulate)。你的意思是'std :: begin'和'std :: end'是? – BoBTFish 2015-02-05 14:52:01
@BoBTFish嗯,你是對的。由於'accumulate'使用'std :: begin/end',它使用*它的特殊性。我會澄清這一點。話雖如此,專業化是實施的一部分,而不是簽名(這並不會使我的原始聲明更加錯誤)。 – 2015-02-05 14:53:07
'std :: accumulate'不使用'std :: begin/end',儘管你很可能在調用它時使用它們。除非你指的是一些即將到來的範圍版本,這是不是標準呢? – BoBTFish 2015-02-05 14:54:26
- 1. 傳遞給函數的數組給出了nan元素(C++)
- 2. 算法得到哪些值使數組中的給定數字的總和
- 3. SQL Server的總和函數給出正確的總和值
- 4. 多個連接和求和函數給出錯誤的總數或總和
- 5. sql和c#給出了不同的總和爲相同的數據
- 6. 算法生成的數字所組成的數組數的總和給出了一個具體的數字
- 7. fortran向量值函數給出了總線錯誤
- 8. 找出elisp中某個函數打開了哪些緩衝區?
- 9. 如何找出什麼類被調用了哪些函數?
- 10. 將數組傳遞給一個函數 - 出了什麼問題?
- 11. `WEEKDAY`函數給出了錯誤的值?
- 12. 每組計數+總和值給每組總數
- 13. 找出哪些函數被內聯
- 14. C++數組和函數
- 15. C函數和數組
- 16. C++數組和函數
- 17. 數組和函數C++
- 18. 創建一個總和給定數字的數組數組
- 19. C++將2d數組傳遞給函數
- 20. 將[out]數組傳遞給C++函數
- 21. 將數組傳遞給函數C
- 22. C++將char數組傳遞給函數
- 23. 將數組傳遞給函數c
- 24. 將數組傳遞給函數c
- 25. FREAD()函數給出了垃圾
- 26. 運行MATLAB函數給出了錯誤
- 27. 如何將1D和2D數組參數傳遞給函數c
- 28. 聚合函數不給總和
- 29. C++數組和函數和計數器
- 30. C++範圍?將數組傳遞給函數時出現問題
可能重複的[在一個數組連續元素的總和,C++](http://stackoverflow.com/questions/13108622/sum-of-consecutive-elements-in-an-array-c) – 2015-02-05 14:42:26
@JeromeL我很確定它不是重複的(至少是那個特定的Q) – 2015-02-05 14:43:09