我在旧版本的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;
}
累加器有三个参数,范围中的第一个和最后一个元素,以及初始值。因此,如果您累积了3
和4
的值,且初始值为22
,则最终值为28
。
在这种情况下,T()
只是模板类型的默认构造的初始元素,对于您使用的任何类型,基本上都是“零”值。