我试图读取整数值文件并将每个值推送到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);
}
}
}
}
}
当我打印矢量时,它仅填充零,即使打印到标准输出的读取值是我期望的(文件中的值)。
答案 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;
}
}
上面的代码构建了一行数据,一次一列。当读取足够的列时,该行随后会附加到矩阵中。