在c ++中迭代一个向量数组

时间:2013-06-21 04:03:59

标签: c++ vector iterator

我正在尝试迭代我的矢量数组,但我似乎无法让它工作,我的错误是在第二个for循环,错误信息如下:

  

在'double'之前预期的主要表达

我已经了解了如何迭代常规向量,但是如何迭代向量数组? 我遵循了这个结构:

#include <iostream>
#include <vector>

int main ()
{
  std::vector<int> myvector;
  for (int i=1; i<=5; i++) myvector.push_back(i);

  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it = myvector.begin() ; it != myvector.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

我似乎无法让我的矢量数组版本工作。

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int main(int arc, char *argv[])
{
   vector<double> vector[7];

   double num[7];
   ifstream infile("data.txt"); 
   string temp;

   for(int i = 0; i <= 6; i++)
   {
      infile >> temp;
      cout << temp << ' ';
   }
   cout << endl;

   while(infile >> num[0] >> num[1] >> num[2] >> num[3] >> num[4] >> num[5] >> num[6])
   {
      for(int i = 0; i <= 6; i++)
      {
         vector[i].push_back(num[i]);
      }
   }
   cout << endl;

   for(int i = 0; i <= 6; i++)
   {
      // error on this line
      // not sure what is wrong before vector<double>:: iterator it = vector[i].begin()
      for(vector<double>::iterator it = vector[i].begin(); it != vector[i].end(); ++it)
      {
         cout << ' ' << *it;
      }
   }
   return 0;
}

3 个答案:

答案 0 :(得分:2)

在这行代码上

for(vector<double>::iterator it = vector[i].begin(); it != vector[i].end(); ++it)

vector不是一种类型,它是一个变量。本地范围中的名称隐藏全局范围中的名称。

你可以写

for(::std::vector<double>::iterator it = vector[i].begin(); it != vector[i].end(); ++it)

for(auto it = vector[i].begin(); it != vector[i].end(); ++it)

但更好的解决方案是不要对多个不同的东西使用相同的名称。

答案 1 :(得分:1)

#include <iostream>
#include <fstream>
#include <vector>

using std::ifstream;
using std::vector;
using std::cout;

int main(int arc, char *argv[])
{
   const size_t data_size = 7;
   ifstream infile("data.txt"); 
   vector<double> input;
   double num;
   while ((infile >> num) && (input.size() <= data_size))
   {
      input.push_back(num);
   }
   for (vector<double>::iterator it = input.begin(); it != input.end(); ++it)
   {
      cout << ' ' << *it;
   }
   return 0;
}

使用最少的变量并获得一个工作。另外,不要在标准库函数,类,结构等之后命名变量,并避免using namespace std; {{1}}和using directive s {/ 3}}。

答案 2 :(得分:-1)

你可以简单地遍历这样的数组向量 for (int i=0; i<myvector.size(); i++) { for (int j=0; j<myvector.size(); j++) { cout<<myvector[i][j]<<endl; } }