将文件中的值读入2D矢量会导致所有值均为零

时间:2017-10-13 17:20:56

标签: c++ vector

我试图读取整数值文件并将每个值推送到2D矢量中。无论出于何种原因,我的结果向量都是零,而不是我刚从文件中读出的值。为什么这样,我该如何解决?

void populateVector(string file, vector<vector<int>>& v, int rows, int cols){
  ifstream read(file);
  int val;

  if (!read.is_open()) {
    throw runtime_error("Output file is not open.");
  } else {
    //Populate 2D vector with values from file
    while (read >> val) {
      cout << val << endl; //Prints each value being processed. Prints proper value.
        for (int i = 0; i < rows; i++) {
          vector<int> newCol;
          v.push_back(newCol);
          for (int j = 0; j < cols; j++) {
            v.at(i).push_back(val);
          }
        }
      }
  }
}

当我打印矢量时,它仅填充零,即使打印到标准输出的读取值是我期望的(文件中的值)。

2 个答案:

答案 0 :(得分:2)

你的解决方案会将所有数字'cols'时间推入每一行,也就是你最终得到了行*(cols * n)矩阵。正确地看看你的循环。

我假设您只想阅读每个号码一次。然后将循环更改为以下内容(根据需要添加错误检查)

for (int i = 0; i < rows; i++)
  {
     std::vector<int> newRow;
     for (int j = 0; j < cols; j++)
     {
        int val;
        read >> val;
        newRow.push_back(val);
     }
     v.push_back(newRow);
  }

答案 1 :(得分:1)

如果您想一次读取一个值,您可能需要考虑这样的循环:

unsigned int column = 0;
std::vector<std::vector<int> > matrix;
std::vector<int> data_row;
while (read >> value)
{
  data_row.push_back(value);
  ++column;
  if (column > MAXIMUM_COLUMNS)
  {
    matrix.push_back(row_data);
    data_row.clear();
    column = 0;
  }
}

上面的代码构建了一行数据,一次一列。当读取足够的列时,该行随后会附加到矩阵中。