迭代器和C ++中的平均值

时间:2013-07-07 17:32:38

标签: c++ vector iterator average

我正在尝试学习使用迭代器和C ++中的向量,例如计算向量的平均值。

然而,这段代码没有给出正确答案,我无法弄清楚原因!

double average(vector<double> const &v)
{
    vector<double>::size_type taille = v.size();
    double sum = 0;
    for(vector<double>::const_iterator i = v.begin(); i != v.end(); ++i)
        sum += v[*i];

    return sum/taille;
}

有人可以给我一个提示吗?

提前多多感谢!再见:)

3 个答案:

答案 0 :(得分:4)

在C ++中,迭代器模仿指针的行为(在某种程度上)。因此,如果it是元素的迭代器,则可以通过解除引用将其作为*it来访问该元素。

这意味着,而不是:

sum += v[*i];  

你应该这样写:

sum += *i; //just dereference the iterator!

希望有所帮助。

答案 1 :(得分:1)

通过迭代器访问矢量项只是*i,而不是v[*i]。您使用的表单需要使用索引访问:

for (size_t i = 0; i < v.size(); i++) sum += v[i];

您的代码应如下所示:

for(vector<double>::const_iterator i = v.begin(); i != v.end(); ++i)
    sum += *i;
          ^^^^ note this

答案 2 :(得分:1)

迭代器实际指向对象。正确的迭代方式是:

double average(vector<double> const &v)
{
    vector<double>::size_type taille = v.size();
    double sum = 0;
    for(vector<double>::const_iterator i = v.begin(); i != v.end(); ++i)
        sum += *it;

    return sum/taille;
}

在C ++ 11中,您也可以这样做:

double average(vector<double> const &v)
{
    double sum = 0;
    for(const double &d : v)
        sum += d;

    return sum/v.size();
}