C++ C++;std::使用数组进行reduce

C++ C++;std::使用数组进行reduce,c++,stl,iterator,std,C++,Stl,Iterator,Std,我编写这段代码是为了使用带有整数数组的std::reduce函数。如何定义数组的开头和结尾?使用和 #包括 #包括 int main(){ int arr1[5]={1,2,3,4,5}; int sum=std::reduce(std::cbegin(arr1),std::cend(arr1)); std::cout为什么不使用?那么您将拥有和。@TonyTannous我知道它可以很好地处理向量,只是想知道它是否也可以处理数组not@TonyTannousC++11和更高版本有std::beg

我编写这段代码是为了使用带有整数数组的
std::reduce
函数。如何定义数组的开头和结尾?

使用和

#包括
#包括
int main(){
int arr1[5]={1,2,3,4,5};
int sum=std::reduce(std::cbegin(arr1),std::cend(arr1));

std::cout为什么不使用?那么您将拥有和。@TonyTannous我知道它可以很好地处理向量,只是想知道它是否也可以处理数组not@TonyTannousC++11和更高版本有
std::begin()
std::end()
,它们同样适用于容器和固定数组。
reduce()
接受迭代器,而不是元素的值。选项包括
reduce(&arr1[0],&arr1[5])
(注意
&
s)、
reduce(arr1,arr1+5)
或(为了避免对数组长度进行硬编码,如果数组长度发生变化,并且忘记更新所有用法,则会中断),
reduce(&arr1[0],&arr1[sizeof(arr1)/sizeof(arr[0]))
reduce(arr1,arr1+sizeof(arr1)/sizeof(arr[0])
。更好的方法是使用标准库,并执行
reduce(std::begin(arr1),std::end(arr1))
。如果原始数组作为参数传递给函数,这会起作用吗?@Tony如果它作为
T[size]传递给函数(是特定大小的数组)而不是
T[]
(衰减为指针)。请参阅。试图在原始指针上使用
std::begin()
std::end()
将是编译错误。@TonyTannous这取决于函数所使用的参数accepts@Javadkhan使用
std::begin(T)的好处
std::end(T)
出现在您有一个迭代的数组,但随后决定将其升级到STL容器时。现在您不必梳理所有代码并用
arr1.begin(),arr1.end()
替换
arr1,arr1+5
int arr1[5] = { 1,2,3,4,5 };
int sum = reduce(arr1[0], arr1[5]);
#include <iostream>
#include <numeric>
int main(){
    int arr1[5] = { 1,2,3,4,5 };
    int sum = std::reduce(std::cbegin(arr1), std::cend(arr1));
    std::cout << sum;
}