Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
累加在C++;? 我是C++新手,最近发现了一个函数叫做代码>累加()。我在互联网上搜索了它是什么,并阅读了教程,但无法理解它的作用 #include <iostream> #include <numeric> using namespace std; int main () { int init = 100; int numbers[] = {10,20,30}; cout << accumulate(numbers,numbers+3,init) << "\n"; } #包括 #包括 使用名称空间std; int main() { int init=100; 整数[]={10,20,30}; cout_C++_Algorithm_Stl - Fatal编程技术网

累加在C++;? 我是C++新手,最近发现了一个函数叫做代码>累加()。我在互联网上搜索了它是什么,并阅读了教程,但无法理解它的作用 #include <iostream> #include <numeric> using namespace std; int main () { int init = 100; int numbers[] = {10,20,30}; cout << accumulate(numbers,numbers+3,init) << "\n"; } #包括 #包括 使用名称空间std; int main() { int init=100; 整数[]={10,20,30}; cout

累加在C++;? 我是C++新手,最近发现了一个函数叫做代码>累加()。我在互联网上搜索了它是什么,并阅读了教程,但无法理解它的作用 #include <iostream> #include <numeric> using namespace std; int main () { int init = 100; int numbers[] = {10,20,30}; cout << accumulate(numbers,numbers+3,init) << "\n"; } #包括 #包括 使用名称空间std; int main() { int init=100; 整数[]={10,20,30}; cout,c++,algorithm,stl,C++,Algorithm,Stl,accumulate如果没有特殊函数,则取两个迭代器并返回总和,您的init指定起始变量。它类似于或函数“reduce”。上面的代码给出160,因为它正在计算 100 + 10 + 20 + 30 代码>代码>将是数组开始的指针,代码>数字+ 3 /代码>是“一个过去的结束”,一个典型的C++迭代器习惯用法。 #include <iostream> #include <iterator> #include <numeric> int main () {

accumulate
如果没有特殊函数,则取两个迭代器并返回总和,您的
init
指定起始变量。它类似于或函数“reduce”。上面的代码给出160,因为它正在计算

100 + 10 + 20 + 30
<代码>代码>代码>将是数组开始的指针,代码>数字+ 3 /代码>是“一个过去的结束”,一个典型的C++迭代器习惯用法。
#include <iostream>
#include <iterator>
#include <numeric>

int main ()
{
  int init = 100;
  int numbers[] = {10,20,30};

  std::cout << std::accumulate(std::begin(numbers), std::end(numbers), init) << "\n";
}
虽然这些简单的函数通常被写成


就是它的名字。它只是对整个序列进行总结。此外,您可以提供初始值。在您的情况下,初始值是
100

,我们可以这样表示函数:

accumulate(first, last, init)
这里的
accumulate()
函数将
[first,last)
范围内介于
first和(last-1)索引之间的所有值相加

这里,
init
是和的初始值

函数类似于下面的C++代码:

#include <iostream>
#include <numeric>
using namespace std;
int main ()
{
    int init = 100;
    int numbers[] = {10,20,30};

    int first = 0, last = 3;
    int sum = init;

    for(int i = first ;i < last ;i++)
      sum = sum + numbers[i];

    cout << sum << "\n";
}
您可能会问,为什么我们在第一个参数中传递数字而不是0

答案是:

这里的
accumulate()
函数不知道要对哪个数组求和。
因此,您需要将
起始地址
即编号[0]的地址通知函数

如果要将
x位置到y-1位置之间的元素求和,则必须编写以下代码:

accumulate(numbers + x, numbers + y, init)

好吧,如果你读了上面的文档

返回累加范围内所有值的结果 [第一,最后)到初始化

所以

数字=10+20+30=60,初始=100=>100+60=>160


std::accumulate是第一个迭代器,数字和最后一个迭代器数字+3。

你发布的链接提供了与调用accumulate相当的代码。你不明白那里有什么?这可能是更相关的问题。它只是累积:)谢谢:)它帮助了很多,但接受了@Ali的答案,因为它很容易找到倒立。
#include <iostream>
#include <numeric>
using namespace std;
int main ()
{
    int init = 100;
    int numbers[] = {10,20,30};

    int first = 0, last = 3;
    int sum = init;

    for(int i = first ;i < last ;i++)
      sum = sum + numbers[i];

    cout << sum << "\n";
}
accumulate(numbers, numbers + 3, init)
accumulate(numbers + x, numbers + y, init)