gpt4 book ai didi

c++ - 无法将带有 bool 网格的文本文件读入 vector 的 vector 中

转载 作者:行者123 更新时间:2023-11-30 01:34:08 29 4
gpt4 key购买 nike

我有一个文本文件,它由如图所示的 bool 网格结构组成。现在,我正在尝试将文本文件读入 vector<vector<bool>> grid .但我无法这样做。我的代码退出时没有任何错误,并且执行没有在 while 中移动循环。

文本文件有以下示例:

00000000000000001111111110000
000000100000000010100000100
0000000000000000111111111000
00000000000000011111111111000
0001000000000011111111111110
00000000000000011000000011000
00000000000000100010001000100
00000000000000100000100000
00100011111111111111111001110
00000000000011111000100000001
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;

vector<vector<bool> >read_grid(const string &filename)
{
vector<vector<bool> > gridvector;
// Open the File
ifstream in(filename.c_str());
string str;
bool tempb;// Check if object is valid
if(!in)
{
cout<< "Cannot open the File : "<<filename<<endl;
return gridvector;
}

// Read the next line from File untill it reaches the end.
while (getline(in, str))
{
istringstream iss(str);
vector<bool> myvector;
while(iss>>tempb)
{
myvector.push_back(tempb);
}

gridvector.push_back(myvector);
}

//Close The File
in.close();
return gridvector;
}
void display_grid(vector< vector<bool> >& grid)
{
// this generates an 8 x 10 grid and sets all cells to ’0’
//vector<vector<bool> >grid(8, vector<bool>(10, 1));// printing the grid
for(int x = 0; x < grid.size(); x++)
{
for(int y = 0;y < grid[x].size();y++)
{
// cout<<grid[x].size()<<'\n';
cout << grid[x][y];
}
cout << endl;
}
cout<<"grid at position [1][2] is: "<< grid[1][2]<<'\n';
}
int main ()
{
const string b_file = "intial_grid.txt";
vector< vector<bool> > grid_copy = read_grid(b_file);
display_grid(grid_copy);
return 0;
}

它正在以“退出状态 -1”退出。

最佳答案

字符串流在成功读取时返回 true,在错误时返回 false。

在您的情况下,iss >> tempb 将失败,因为它需要一个 bool 值,即一个位,但却收到了一个由 0 和 1 组成的字符串。

你可以在第一次阅读iss >> tempb之后检查这个,

if (iss.fail()) {
cout << "Failed to read\n";
}

您可以改为单独迭代字符。

// Read the next line from File untill it reaches the end.
while (getline(in, str))
{
istringstream iss(str);
vector<bool> myvector;
char bit;
while(iss >> bit)
{
myvector.push_back(bit == '1' ? true : false);
}

gridvector.push_back(myvector);
}

关于c++ - 无法将带有 bool 网格的文本文件读入 vector 的 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56892486/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com