C ++文件流矢量输入

时间:2017-10-14 22:24:50

标签: c++ arrays vector

我目前正在使用c ++。我的目标是能够通过我计划能够存储的一系列步骤来实现A *算法,并列出从A点到B点的最短路径。

我的程序将接受一个命令行参数,该参数将是一个要读入的文件。给程序一个文件读入的目的是每个文件都是它自己的" grid"用于A *处理。网格文件的格式如下:

Num 1 = WIDTH,然后Num 2 = HEIGHT

o =开始

* =完成

。 =可通过的节点

#=无法通行的墙

这是一个示例网格,让我们称之为" Grid1",将是:

8 5 
o......#
......##
.....###
....####
.......*

所以要处理这个,当你运行程序时,你会传入" Grid1"。 从这里开始,我计划创建一个文件流,并将每个角色读入2D阵列/矢量,以尝试重新创建网格,这样我就可以拥有位置。例如,在" Grid1"角色" o"将在阵列/矢量中的位置[0] [0]。我的尝试实施如下:

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

using namespace std;

int main(int argc, char *argv[]) 
{
    //Checking for CLA
    if( argc < 1 ) 
    {   
    cout << "Program must take atleast <1> arguments!" << endl << "1) File to read  2) OPTIONAL: Type of search" << endl;
}   

//CLA #1 is the file containing GRID to be read in
string gridTBO = argv[1];

//Start new filestream and open grid file for reading
ofstream gridFile;
gridFile.open( gridTBO );  

//Check to make sure we can even open the file before proceeding
if( gridFile.is_open() )
{   
//To store grid data
vector<string> grid;
grid[0][0].push_back("Hello");
cout << grid[0][0]; 

}   

但是,关于我的&#34; push_back&#34;,似乎我无法打印出来或将数据丢入向量中。我主要希望每个索引如[0] [0] [0] [1] [0] [2]保存每个单独的字符,以便重新创建一个像我传入的网格。

我不太确定我做错了什么,因为我使用向量相当缺乏经验,但是,将数据推入网格的代码纯粹是出于测试目的。一旦我能够将一些数据解析到向量中,我就会想要用循环自动化它并使用&#34; getline&#34;或类似的功能为我抓取数据。

所以我的主要问题是: 1)为什么我的push_back和打印输出失败? 2)我如何用char循环读取char,以防止我手动将数据放入?

我在运行时收到的错误是: 细分错误(核心转储)

提前感谢大家的帮助和知识!

1 个答案:

答案 0 :(得分:0)

ofstream用于输出文件。使用ifstream来阅读文件。

vector<string> grid;

vector<string>适用于您的情况。但使用vector<vector<char>>创建向量的二维数组更容易,然后访问grid[x][y]

与数组不同,向量在创建时不具有任何元素,因此在您向其添加内容之前,没有有效的grid[x][y]grid[x]

请尝试使用此代码:

int main()
{
    ifstream fin("test.txt");

    vector<vector<char>> grid;

    int row = 0;
    string line;
    while(fin >> line)
    {
        grid.resize(row + 1);
        for(auto c : line)
            grid[row].push_back(c);
        row++;
    }

    for(auto row_vector : grid)
    {
        for(auto e : row_vector)
            cout << e;
        cout << "\n";
    }

    return 0;
}
相关问题