【发布时间】:2019-07-11 02:03:23
【问题描述】:
我正在进行一项需要我切换到 C++ 的实验,我仍在学习。我需要将文件中的数据读取到二维数组中,其中文件中的数据由浮点数组成,以矩阵格式排列。但是,数据文件中矩阵的每一行都有不同的列数,例如:
1.24 3.55 6.00 123.5
65.8 45.2 1.0
1.1 389.66 101.2 34.5 899.12 23.7 12.1
好消息是我知道文件可能具有的最大行数/列数,至少现在我并不特别担心内存优化。我想要的是有一个二维数组,其中相应的行/列与文件的行/列匹配,所有其他元素都是一些已知的“虚拟”值。
我的想法是遍历文件的每个元素(逐行),识别行尾,然后开始读取下一行。不幸的是,我无法执行此操作。例如:
#include <iostream>
#include <fstream>
int main() {
const int max_rows = 100;
const int max_cols = 12;
//initialize the 2D array with a known dummy
float data[max_rows][max_cols] = {{-361}};
//prepare the file for reading
ifstream my_input_file;
my_input_file.open("file_name.dat");
int k1 = 0, k2 = 0; //the counters
while (!in.eof()) { //keep looping through until we reach the end of the file
float data_point = in.get(); //get the current element from the file
//somehow, recognize that we haven't reached the end of the line...?
data[k1][k2] = next;
//recognize that we have reached the end of the line
//in this case, reset the counters
k1 = 0;
k2=k2+1;
}
}
所以我无法弄清楚索引。部分问题是,虽然我知道字符“\n”标记了一行的结尾,但与文件中的浮点数相比,它的类型不同,所以我很茫然。我是不是想错了?
【问题讨论】:
-
一定要用数组吗?
-
用数组不可能完成吗?我对矢量没有任何经验...
-
难道不能用数组来完成 -- 不是不可能,但不切实际。如果您查看您的代码,您会想出任意大小。以任何方式超过这些大小,都会导致未定义的行为。不使用所有空间,你有空的空间不做任何事情。除此之外,数组不可调整大小,因此您永远不能拥有“锯齿状”二维数组。如果有的话,你是在使用二维数组来伪造这个。除此之外,在使用传统数组时,您不知道每一行的“实际大小”。使用
std::vector——它可以解决所有这些问题。 -
while (!in.eof())-- 为此,please read this -
@JohnAlperto 查看我的更新答案!!!!我尽力做到尽可能简单、高效和易于理解!!!!
标签: c++ arrays file multidimensional-array