我正在尝试学习使用迭代器和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;
}
有人可以给我一个提示吗?
提前多多感谢!再见:)
答案 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();
}