0

我正在尝试通过例如计算向量的平均值来学习在 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;
}

任何人都可以给我一个提示吗?

非常感谢提前!再见 :)

4

3 回答 3

4

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

这意味着,而不是这个:

sum += v[*i];  

你应该这样写:

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

希望有帮助。

于 2013-07-07T17:36:48.773 回答
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
于 2013-07-07T17:35:03.970 回答
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();
}
于 2013-07-07T17:38:21.220 回答