我想编写一个计算STL容器中元素总和的泛型函数。我的方法如下(t
是一个容器):
template <typename T> double Sum(const T& t){
typename T::reverse_iterator rit = t.rbegin();
double dSum = 0.;
while( rit != t.rend() ){
dSum += (*rit);
++rit;
}
return dSum;
}
但是我遇到了很多错误。我想问题是关于我定义迭代器的第二行?非常感谢任何帮助:)
答案 0 :(得分:5)
应该是
typename T::const_reverse_iterator rit = t.rbegin();
由于t
为const
而rbegin
为const
容器返回const_reverse_iterator
,因此无法转换为reverse_iterator
。
最好使用std::accumulate
,而不是你自己的功能,比如这个
double result = std::accumulate(c.rbegin(), c.rend(), 0.0);
答案 1 :(得分:1)
非常感谢任何帮助:)
如果您在生产代码中执行此操作,请改用std::accumulate
:它是标准的生产质量代码,应该已经实施和测试。
如果您将此作为练习编写,请考虑以下事项:
Sum
)分开。例如(使用std :: accumulate),您可以将其称为std::accumulate(t.begin(), t.end(), 0)
或std::accumulate(t.rbegin(), t.rend(), 0)
或std::accumulate(t.cbegin(), t.cend(), 0)
。
按值接收begin迭代器并直接递增(它将节省你在内部声明rit的需要;通过const引用接收结束迭代器。
可选:设置总和的默认值(默认值应为零)。