C++ STL列表计算平均值

xsl*_*xsl 2 c++ stl average list

我必须纠正一些C++/STL代码.不幸的是,我的C++经验很少,对STL一无所知.不过我完成了大部分工作,但下面的功能仍然给我带来了问题:

C++源码:

double MyClass::CalculateAvg(const std::list<double> &list)
{
    double avg = 0;
    std::list<int>::iterator it;
    for(it = list->begin(); it != list->end(); it++) avg += *it;
    avg /= list->size();
}
Run Code Online (Sandbox Code Playgroud)

C++标题:

static double CalculateAvg(const std::list<int> &list);
Run Code Online (Sandbox Code Playgroud)

它最有可能是从列表中计算平均值,但它符合很多错误.我试图在网上搜索解决方案,但我找不到任何东西.如果有人可以帮助我,我会很高兴的.

更新:感谢您的快速回复.接受的答案解决了我所有的问题.

Pet*_*der 32

一些事情:

  1. 你没有退货.(添加return avg;)
  2. ->运营商是指向对象的指针.你有一个列表的引用,所以你使用list.begin()和不使用list->begin()(与其他成员函数相同)
  3. 迭代器应该是a const_iterator,而不是iterator.

无论如何,您应该执行以下操作:

return std::accumulate(list.begin(), list.end(), 0.0) / list.size();

(可选)检查list.size() == 0您的用例中是否可以.

  • 对于std :: accumulate为+1,请记住list.size()将遍历列表,因此您不希望将其调用两次 (2认同)
  • @Peter Alexander使用empty()而不是大小,以防你检查空:). (2认同)

Pie*_*BdR 13

所以,第一个错误是:

std::list<int>::iterator it;
Run Code Online (Sandbox Code Playgroud)

您可以在整数列表上定义迭代器,并使用它来迭代双精度列表.此外,迭代器只能用于非常量列表.你需要一个恒定的运算符.你应该写:

std::list<double>::const_iterator it;
Run Code Online (Sandbox Code Playgroud)

最后,你忘了返回值.

编辑:我没有看到,但您将列表作为参考传递,但将其用作指针.所以更换所有list->list.