找到 std::vector
中所有元素之和的 好 方法是什么?
假设我有一个向量 std::vector<int> vector
有一些元素。现在我想找到所有元素的总和。相同的方法有哪些不同?
原文由 Prasoon Saurav 发布,翻译遵循 CC BY-SA 4.0 许可协议
找到 std::vector
中所有元素之和的 好 方法是什么?
假设我有一个向量 std::vector<int> vector
有一些元素。现在我想找到所有元素的总和。相同的方法有哪些不同?
原文由 Prasoon Saurav 发布,翻译遵循 CC BY-SA 4.0 许可协议
std::accumulate
可能存在溢出问题,因此最好的方法是对更大的数据类型变量进行基于范围的累积以避免溢出问题。
long long sum = 0;
for (const auto &n : vector)
sum += n;
然后使用 static_cast<>
进一步向下转换为适当的数据类型。
原文由 Dhruv Kakadiya 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
其实方法也不少。
C++03
重要说明: 最后一个参数的类型不仅用于初始值,还用于 _结果的类型_。如果你把一个 int 放在那里,即使向量有浮点数,它也会累积 int。如果要对浮点数求和,
0
更改为0.0
或0.0f
( 感谢 nneonneo )。另请参阅下面的 C++11 解决方案。C++11 及更高版本
std::for_each
:C++17 及以上
std::reduce
它也处理结果类型,例如,如果你有std::vector<int>
,你会得到int
结果。如果你有std::vector<float>
,你会得到float
。或者如果你有std::vector<std::string>
,你会得到std::string
(所有字符串连接)。很有趣,不是吗?此函数还有其他重载,您甚至可以并行运行,以防万一您有大量集合并且想要快速获得结果。