c++ - 如何读取文件

标签 c++ file-io matrix

我将 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/

相关文章:

c++ - 检查谁赢了 Tic Tac Toe 更高效的 C++

c++ - 使用派生自 `std::get` 的元素在 `std::tuple` 上调用 `std::tuple` - 格式错误?

c++ - 理解歧义解决的示例代码

ios - 检查是否-[NSData writeToFile :atomically:] is done

.net - 如何从图片框中释放图片以便在 VB.NET 中删除图片文件

c++ - 统一构建的好处/坏处?

file-io - 打开文件时在 Komodo Edit 中自动切换自动换行

Android OpenGL 3D采摘

矩阵的行向后累积乘积/乘法

Matlab:查找矩阵每一列首次出现的行索引(不使用循环)