[英]C++ template function on a STL container
我想编写一个通用函数来计算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;
}
但是我遇到很多错误。 我猜问题出在第二行定义迭代器的地方? 将不胜感激:)
应该
typename T::const_reverse_iterator rit = t.rbegin();
由于t
为const
且const
容器的rbegin
返回const_reverse_iterator
,因此无法将其转换为reverse_iterator
。
最好使用std::accumulate
,而不是您自己的函数,像这样
double result = std::accumulate(c.rbegin(), c.rend(), 0.0);
将不胜感激:)
如果您在生产代码中执行此操作,请改用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引用接收end迭代器。
可选:设置总和的默认值(默认值应为零)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.