我不知道如何使用for循环访问向量的元素以找到平均值。我试图寻找解决方案,但找不到任何东西。我写的一小段代码似乎不是解决方案。
#include <iostream>
#include <vector>
using namespace std;
int main() {
const int VALS_SIZE = 6;
vector<int> valsVctr(VALS_SIZE);
unsigned int i;
int sumVal;
int avgVal;
valsVctr.at(0) = 30;
valsVctr.at(1) = 20;
valsVctr.at(2) = 20;
valsVctr.at(3) = 15;
valsVctr.at(4) = 5;
valsVctr.at(5) = 10;
sumVal = 0;
avgVal = 0;
/* FIXME: Write for loop to iterate through vector */
for(int i = 0; i < 7;i++)
valsVctr[i] = i+1;
avgVal = sumVal / VALS_SIZE;
cout << "Avg: " << avgVal << endl;
return 0;
}
答案 0 :(得分:1)
您不应使用显式for
循环
for(int i = 0; i < 7;i++) //
您遇到i = 6
的访问错误。
代替使用for-range
循环:
for(const auto& x: valsVctr)
{
sumVal += x;
}
avgVal = sumVal / VALS_SIZE;
此外,sumVal
和avgVal
类型最好是float
或double
,而不是int
。
答案 1 :(得分:0)
您可以将for
循环与迭代器一起使用:
std::vector<int>::const_iterator iter;
std::vector<int>::const_iterator end_iter(valsVctr.end());
for (iter = valsVctr.begin(); iter != end_iter; ++iter)
{
std::cout << *iter << endl;
}
这比基于索引的for
循环更安全。
如果要使用索引的for
循环,请使用size
方法作为限制:
const unsigned int limit = valsVctr.size();
for (unsigned i = 0; i < limit; ++i)
{
valsVctr[i] = i + 1;
}
注意:将向量的大小分配给一个临时变量,以防止在每次迭代中调用size()
方法(尽管编译器可以在更高的优化级别上执行此优化)。
答案 2 :(得分:0)
下面的每种方法都有效
for(int i = 0; i <6; i ++) sumVal + = valsVctr [i];
for(int k:valsVctr) sumVal + = k; // c ++ 11