累加在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)