【发布时间】:2021-11-10 06:09:24
【问题描述】:
假设我想计算数组的第一个 k 元素的累积乘积。
int arr[8] = {3, 5, 7, 4, 8, 9, 1, 2};
int k = 3;
就性能而言,哪一个是最佳选择?
选项1.普通for循环
int result = 1;
for (size_t i = 0; i < k; ++i) {
result *= arr[i];
}
选项 2. 累积
result = std::accumulate(std::begin(arr),
std::begin(arr) + k,
1,
[](const int& x, const int &y) { return x*y; });
我对@987654326@ 很小的情况特别感兴趣,例如k = 3 或k = 4。在这种情况下,花哨的 C++11 做事方式真的值得吗?
【问题讨论】:
-
“最佳”指的是什么?使用算法而不是循环的一个主要原因是可读性和表现力,这主要是基于意见
-
顺便说一句,用
std::multiplies累积不是“花哨的 C++11 方式”,这在 C++11 之前很久就可能实现,而且在 C++11 之后它比手写的 lambda 更可取跨度> -
在性能方面。最初的帖子已编辑。
-
为了可读性,毫无疑问
for循环在做什么......两个都值得理解,“style-points v. readabilty, style-points v. readability, ...”结构有一个平衡。 -
@DavidC.Rankin 毫无疑问 std::accumulate 正在做什么。在我看来,两者都同样具有可读性。这是样式点和样式点之间的权衡。
标签: c++ accumulate