在模板中奇怪地使用std::accumulate 我在一个旧版本的C++烹饪书中看到了这个代码,它让我迷惑。这似乎可以编译,但我不知道为什么代码会这样编写

在模板中奇怪地使用std::accumulate 我在一个旧版本的C++烹饪书中看到了这个代码,它让我迷惑。这似乎可以编译,但我不知道为什么代码会这样编写,c++,stl,accumulate,C++,Stl,Accumulate,T()是什么意思?这是std::accumulate的init参数——开始求和的值。我编写了一个版本,其中我将double()替换为T()(以“硬连线”模板),然后它进行编译。double()是什么意思 #包括 #包括//累积 #包括 模板 无效计算(Iter_T first,Iter_T last,T&accum) { accum=std::accumulate(first,last,T());//为什么init参数等于T()? } int main() { std::矢量vd; vd.推回(

T()是什么意思?这是std::accumulate的init参数——开始求和的值。我编写了一个版本,其中我将double()替换为T()(以“硬连线”模板),然后它进行编译。double()是什么意思

#包括
#包括//累积
#包括
模板
无效计算(Iter_T first,Iter_T last,T&accum)
{
accum=std::accumulate(first,last,T());//为什么init参数等于T()?
}
int main()
{
std::矢量vd;
vd.推回(1.11);
vd.推回(2.22);
vd.推回(4.44);
vd.推回(3.33);
双sum1;

std::cout这个累加器变量有三个参数,范围中的第一个和最后一个元素,以及要开始的初始值(下面这个特定的原型是C++20,尽管早期的原型类似,只是较少
constepr
goodness):

模板
constexpr T累加(先输入,后输入,后输入);
它允许您累积到已经开始的值。因此,如果您累积值
3
4
,初始值为
22
,最终值将为
28
。原因是您可能希望累积某一组数据,然后再累积更多。使用init从初始值开始,您可以在单个项目中进行多次累加


在这种情况下,<代码>()(代码)>只是模板类型的默认构造的初始元素,基本上是您使用的任何类型的“0”值。

基本上是零初始化。

#包括
使用名称空间std;
int main(){
库特
#include <iostream>
#include <numeric> // accumulate
#include <vector>

template<class T, class Iter_T>
void computeAccum(Iter_T first, Iter_T last, T& accum)
{
    accum = std::accumulate(first, last, T()); // Why is init argument equal to T()?
}

int main()
{
    std::vector<double> vd;
    vd.push_back(1.11);
    vd.push_back(2.22);
    vd.push_back(4.44);
    vd.push_back(3.33);
    double sum1;
    std::cout << "Here is the vector:" << std::endl;
    std::vector<double> ::iterator it;
    for (it = vd.begin(); it != vd.end(); ++it) {
        std::cout << *it << std::endl;
    }

    computeAccum2(vd.begin(), vd.end(), sum1);
    std::cout << "Answer: " << sum1 << std::endl;
}
template< class InputIt, class T >
constexpr T accumulate( InputIt first, InputIt last, T init );
Int: 0
Float: 0
String: