如何使用for循环遍历向量?我试图在YouTube上查找它,但找不到答案

时间:2020-09-16 00:55:04

标签: c++ for-loop vector

我不知道如何使用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;
}

3 个答案:

答案 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;

此外,sumValavgVal类型最好是floatdouble,而不是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)

下面的每种方法都有效

  1. for(int i = 0; i <6; i ++) sumVal + = valsVctr [i];

  2. for(int k:valsVctr) sumVal + = k; // c ++ 11