【问题标题】:I don't know how to get a const value for my matrix that is read in from a file我不知道如何获取从文件中读取的矩阵的 const 值
【发布时间】:2015-03-03 20:41:05
【问题描述】:

我很困惑,如果您对我的问题感到困惑,我不会感到惊讶。我要做的是创建一个程序,从文件中读取向量/矩阵维度/内容,创建数组,然后执行操作。

ifstream in("input.txt");
stringstream buffer;
buffer << in.rdbuf();
string test = buffer.str();

string line;
ifstream file("input.txt");
string contents;
int* conv;

while (getline(file, line)){
    *conv = atoi(line.c_str());
    //cout << conv << endl;
    size_t pos = line.find("#");
    contents = line.substr(pos + 1);
    //cout << contents << endl;
}
int row = conv[4];
int column = conv[5];
int aMatrix[row];
file.close();
cin.get();

我显然得到了一个错误,指出我必须有一个恒定的值。但是,由于我是从文件中读取的,所以在读取文件之前我不确定如何获取常量。

该文件包含诸如 34#123456789123 之类的行,它转换为内容为 1234...3 的 3 x 4 矩阵。上面的大部分代码都是我如何读取文件,将字符串分成大小和内容,并将它们转换为整数。

函数的参数是(例如,矩阵*矩阵):

int** mxm(int **A, int **B, int rowsA, int colsA, int rowsB, int colsB){
    int** value = NULL;
    for (int i = 0; i < rowsA; i++){
        for (int j = 0; i < colsA; i++){
            for (int k = 0; k < colsB; k++){
                **value += A[i][j] * B[i][k];
            }
        }
    }return value;
}

编辑:我应该提一下,虽然我可以清楚地看到该矩阵是 3x4,但下一个矩阵是 4x3。当我运行程序时,我不应该有任何输入,程序应该能够通过读取文件来完成。

【问题讨论】:

  • *conv = ... 将调用未定义的行为,因此您遇到的问题比您想象的要多。 conv 是一个不确定的指针。
  • 你应该用一个类来表示你的矩阵,而不是int**

标签: c++ pointers file-io matrix matrix-multiplication


【解决方案1】:

如果您需要创建一个数组并且直到运行时才知道数组的大小,您需要使用指针。你可以这样做:

int rows;
std::cout << "Rows: ";
std::cin >> rows;

int * values = new int[rows];
// when done call delete [];
delete [] values;

如果你需要做二维,那么你可以使用:

int rows, cols;
std::cout << "Rows: ";
std::cin >> rows;
std::cout << "Cols: ";
std::cin >> cols;

int ** values = new int[rows];
for (int i = 0; i < rows; i++)
    values[i] = new int[cols];
// when done call delete [] for both dimensions;
for (int i = 0; i < rows; i++)
    delete [] values[i];
delete [] values;

【讨论】:

  • 我确实需要使用二维,因为它是一个矩阵,但是通过这种方式,cout/cin 组合不会要求我输入行数和列数吗?因为不能输入任何东西,我必须从文件中读入。
  • @user3768611:我只是展示了如何获取值和创建数组。如果您使用文件流来获取行和列信息,则在创建数组时仍然会这样做。
  • 这是一种原始方法,并不需要去做。有些容器可以在运行时调整大小,例如std::vector
  • @MattMcNabb:我是否应该提供一个示例,说明如何使用矢量执行此操作?我只是使用指针,因为那是 OP 使用的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2016-08-06
  • 1970-01-01
相关资源
最近更新 更多