我将 bool 矩阵 (ROW*ROW) 保存到 .txt 文件(0,1 格式)。
如何从文件中读取矩阵?我在下面写了代码,但是我将读取的结果与文件进行比较,数组结果与文件不匹配。谁能告诉我哪里写错了?或者有没有更简单的方法来读取矩阵文件?
bool **results = new bool*[ROW];
for(int i=0;i<ROW;i++){
results[i] = new bool[ROW];
}
ifstream infile;
infile.open ("FRM.txt");
string line;
int row=0;
if (infile.is_open())
{
while ( infile.good() )
{
getline(infile,line);
istringstream iss(line);
int col=0;
while(iss)
{
string word;
iss >> word;
int number = atoi(word.c_str());
if(number==1){
results[row][col] = true;
}
else{
results[row][col] = false;
}
col++;
}
row++;
}
}
infile.close();
最佳答案
将矩阵表示为嵌套数组通常不是一个好主意。请改用线性数组,并通过宏或内联函数进行索引处理。
我会选择这样的东西:
#include <algorithm>
#include <cmath>
#include <cstdint> // uint8_t requires C++11
#include <iterator>
#include <vector>
// don't use vector<bool>, it creates all sorts of problems
std::vector<uint8_t> results;
{
std::ifstream infile('FRM.txt', std::ifstream::in);
if(infile.is_open() && infile.good())
{
std::istream_iterator<uint8_t> first(infile), last;
copy(first, last, std::back_inserter(results));
}
}
// only if you know the matrix is square! error checking strongly advised!
size_t nrows = size_t(std::sqrt(results.size()));
// accessing element (i,j) is then as easy as
size_t i = 2, j = 3; // assuming nrows > i,j
bool a_ij = results[i*rows+j];
关于c++ - 如何读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15872137/