c++ - 从文件读取并写入 2D vector

标签 c++ vector 2d maze

当我试图打印我的 2D vector 时,它只读取第 3 行(这是迷宫的第一行)并忽略迷宫的其余部分。我的迷宫就是这样;

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;
}

最佳答案

你的循环应该是这样的:

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 已经是一个数组,那么为每一行添加它有什么意义呢?

关于c++ - 从文件读取并写入 2D vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29922967/

相关文章:

c++ - 编写一个简单的方程解析器

c++ - 在 C 和 C++ 库之间共享变量的困境

c++ - 在 C++ 中使用用户输入变量声明数组大小。在不同的 IDE 中有不同的结果?

c++ - 假设 STL vector 存储总是连续的是否安全?

c++ - 使用四元数围绕轴旋转 vector

java - 一些 2D Java 代码问题

c++ - 使用 : "Operation timed out" 进行大量插入后,cassandra INSERT 失败

c++ - 直接使用 Eclipse CDT 构建共享库

android - 在 android 中使用 animationSet() 动画

c++ - 二维最近邻搜索移动点