【问题标题】:Load matrix from file into vector将矩阵从文件加载到向量中
【发布时间】:2013-06-14 21:16:04
【问题描述】:

我想将一个矩阵从一个文件加载到一个多维向量 - 文件内容是:

0 0 1 1 1 0
1 0 1 0 0 1
0 1 0 1 1 0
0 0 0 0 0 1
1 1 0 0 1 0
1 0 0 1 0 0

我知道如何使用向量并逐行读取文件中的单个字符...但我真的不知道如何制作多维向量并从文件中的每一行读取几个数字...如何我这样做?

【问题讨论】:

  • 这是一个真正的矩阵吗?我的意思是它有固定的界限还是一条线比另一条线长?

标签: c++


【解决方案1】:

我想你可以创建一个整数向量的向量,比如vector<vector<int>> 您可以将一行读取为字符串,然后您可以将其按空格拆分并加载到第一个向量中。然后你把你的内部向量推到外部。

这里是way how to do this

【讨论】:

    【解决方案2】:

    如果所有行都一样长(因为它是一个矩阵),我建议您编写一个自定义类 Matrix 而不是使用 vector<vector<int>>(这肯定有效)。

    这样的类可以暴露如下接口:

    int getWidth()
    int getHeight()
    int get(int x, int y)
    void set(int x, int y, int value)
    

    人们可以想到额外的函数(如乘法等),并且可以更轻松地访问和存储。 (Matrix m_matrix; 看起来比 std::vector<std::vector<int>> m_matrix 更好,不是吗?)。

    根据您的喜好,您可以在内部使用int[][]std::vector<std::vector<int>> 来存储实际数据。

    还要注意,这样的类还会强制执行矩阵可能具有的限制,例如,就像我在第一句话中提到的,同样长的行。

    要真正反序列化这个字符串,抽象地说,你必须遍历每行递增一个计数器,然后遍历每一个递增另一个计数器的数字。 然后在每次迭代中调用myMatrix.set(x,y,parsedValue);

    一个可能的实现可能如下所示:

    std::string line;
    int x = 0;
    int y = 0;
    int value;
    while ( getline( std::cin, line ) ) {
        std::istringstream is( line );
    
        while(!is.eof()) {
            is >> value;
            myMatrix.set(x,y,value)
            x++
        }
        y++
    }
    

    请注意,您首先必须用适当的大小初始化 myMatrix(至少如果您使用数组,如果您使用向量,您可以跳过它)

    这可能是因为这个解决方案听起来要复杂得多(是的,它确实需要更多的时间来实现),但最后,如果你想编写一个易于维护的程序并希望使用多个 Matrix 实例,这肯定是要走的路。请注意,这只是一个建议,界面当然可以看起来不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      • 2021-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      相关资源
      最近更新 更多