2015-04-28 65 views
2

当我试图打印我的2D矢量时,它只读取第三行(这是迷宫的第一行)并忽略其余的迷宫。我的迷宫就是这样的;从文件读取并写入2D矢量

11 
11 
X XXXXXXXXX 
X X 1  X 
X XXXXX X X 
X  X X 1 
XXXXX XXX X 
X X X X 
X X XXX X X 
X X  X X 
X XXXXXXX X 
X   X 
XXXXXXXXXXX 

但是我的最终结果只是重复第一行,

11 
11 
X XXXXXXXXX 
X XXXXXXXXX 
X XXXXXXXXX 
X XXXXXXXXX 
X XXXXXXXXX 
X XXXXXXXXX 
X XXXXXXXXX 
X XXXXXXXXX 
X XXXXXXXXX 
X XXXXXXXXX 
X XXXXXXXXX 

显然,我误以为我在while循环的东西...

#include <iostream> 
#include <stdio.h> 
#include "Maze.h" 
#include "hw2.cpp" 

void PrintVec2D(vector< vector< char> > &v) 
{ 
    for (size_t i=0; i<v.size(); i++) 
    { 
     for(size_t j=0; j<v[i].size(); j++) 
      cout << v[i][j]; 

     cout << '\n'; 
    } 
} 

void PrintVec1D(vector<char> &v) 
{ 
    for (size_t i=0; i<v.size(); i++) 
     cout<< v[i]; 
} 

int main(int argc, char *argv[]){ 

    string line; 
    ifstream myfile (argv[1]); 

    if (myfile.is_open()) 
    { 
     //read just first two lines for rows and cols 
     string firstline; 
     getline(myfile, firstline); 
     int rows = std::stoi(firstline); 

     string secondline; 
     getline(myfile, secondline); 
     int cols=std::stoi(secondline); 

     //create 2d vector 
     vector< vector<char> > _maze; 

     //read rest of the file for maze structure 
     //I think my problem is in this while loop... 
     string line2; 
     int ra = 0; 
     int rb = 0; 

     while(ra<cols) 
     { 
      getline(myfile, line2); 
      vector<char> newRow(line2.begin(),line2.end()); 

      while (rb<rows) 
      { 
       _maze.push_back(newRow); 
       ra++; 
       rb++; 
      } 
     } 

     PrintVec2D(_maze); 
     myfile.close(); 
    } 

    else cerr << "Unable to open file"; 
    return 0; 
} 

回答

1

你的循环应该是这样的:

for(size_t ra = 0; ra < cols; ++ra) 
{ 
    std::string line; 

    if(std::getline(myfile, line)) 
    { 
     vector<char> newRow(line.begin(), line.end()); 
     _maze.push_back(newRow); 
     // or just _maze.emplace_back(line.begin(), line.end()); 
    } 
} 

我找不到第二个使用循环和rb变量。由于newRow已经是一个数组,每行添加它有什么意义?

+0

非常感谢。我痴迷于双重循环或循环,因为每个人都在使用它们来处理这种2D矢量,但是这样处理得更加优雅。 – CgtyKy