Interator and average in C++

Interator and average in C++

本文关键字:C++ in average and Interator      更新时间:2023-10-16

我正在努力学习在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;
}

有人能给我一个提示吗?

提前感谢!再见:)

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

这意味着:

sum += v[*i];  

你应该这样写:

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

希望能有所帮助。

通过迭代器访问向量项只是*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

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

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();
}