【问题标题】:c++: which functions gives the sum of an array?c++:哪些函数给出数组的总和?
【发布时间】:2015-02-05 14:40:20
【问题描述】:

我在 C++ 中寻找一个函数,用于返回数组所有元素的总和,类似于我们在 Matlab 中的函数,即 sum(A),其中 A 是一个数组。 我知道可以简单地做一个 for 循环,但没有任何函数这样做,例如在“std::”中?

【问题讨论】:

标签: c++ arrays sum


【解决方案1】:

该函数名为std::accumulate,位于<numeric>

它适用于标准库容器(能够提供InputIterator,几乎每个容器)和 C 样式数组 - 只要您使用 std::beginstd::end。否则container.begin()/end()当然可以;有关更多信息,请参阅示例用法。

需要注意的是,它提供了两个重载,其中一个添加了BinaryOperation。在其他版本中默认为std::plus。这在实践中意味着它变成了其他语言的foldreduce


使用 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 风格的数组”? Where?。你的意思是std::beginstd::end 是吗?
  • @BoBTFish 嗯,你说得对。由于accumulate 使用std::begin/end,它使用its 特化。我会澄清这一点。话虽如此,专业化是实现的一部分,而不是提供的签名(这并没有使我的原始陈述减少错误)。
  • std::accumulate 不使用std::begin/end,尽管您很可能在调用它时使用它们。除非您指的是一些即将推出的系列版本,这还不是标准的?
  • @BoBTFish 是的,在范围内思考是你几乎不会放弃的事情:)。你当然是对的,很抱歉造成混乱。
  • @BoBTFish 我将源代码复制到答案中,希望您不要介意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 2021-12-16
相关资源
最近更新 更多