Interator and average in C++
Interator and average in C++
我正在努力学习在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();
}
相关文章:
- netcat command in c++
- Difference in displaying cv2 Mat
- C++ MFC Libraries in Travis CI
- 如何在OpenSSL中从configuration.h.in获取configuration.h
- 创建具有 new in 函数和"this is nullptr"异常的对象
- IN, OUT, INOUT Parameters
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 有人安装"IITB Simplecpp in mac"吗?
- 从 C 样式字符串中删除子字符串 "in place" 在C++代码中
- 如何修复"error: ‘_1’ was not declared in this scope"?
- Softmax Implementation in C++
- 将 out/in out 参数与 if/switch 的 init 语句一起使用
- IF-nesting in c++
- Gurobi GRBModel and GRBmodel in C++
- Tensorflow Hub in C++
- Centos7 g++ "to_string is not in a member of std"
- InitializeCriticalSectionEx Not Located In KERNEL32.Dll
- 将 lambda 表达式传递给 std::function in C++
- @CPPFLAGS@在 Makefile.in 中意味着什么?
- std::async from std::async in windows xp