std ::奇怪地在模板中使用

问题描述 投票:0回答:1

我在旧版本的C ++ Cookbook中看到了此代码,这使我感到困惑。这似乎可以编译,但是我不知道为什么用这种方式编写代码。

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

#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;
}
c++ stl accumulate
1个回答
0
投票

累加器有三个参数,范围中的第一个和最后一个元素,以及初始值。因此,如果您累积了34的值,且初始值为22,则最终值为28

在这种情况下,T()只是模板类型的默认构造的初始元素,对于您使用的任何类型,基本上都是“零”值。

© www.soinside.com 2019 - 2024. All rights reserved.