我正在尝试将文件中的浮点数读入动态分配的2D数组中。我正在使用c ++。
在我的.txt文件中,行的元素由制表符空格分隔,每行以新行开头。
我的问题是 -
我可以根据编号增加数组的大小。文件中存在的元素(行和列)?如果是这样,请建议一种方法。
我想写了不。在文本文件的第一行上的行和列,并在开头读取它们以设置将为我的数组分配空间的循环限制。有没有更好的方法,可能基于文本文件的格式?这样,我认为它将更接近流数据类型的场景。
提前致谢。
AKHIL
答案 0 :(得分:7)
请考虑使用自动调整大小的std::vector
,而不是使用数组。在C ++中,这非常适合使用原始数组,因为它更安全并且隐藏了资源管理。
事实上,将std::vector
与流库结合使用,可以非常轻松地读取以制表符分隔的浮点值文件:
ifstream input("my-file.txt");
vector<float> myValues;
for (float f; input >> f; )
myValues.push_back(f);
或者,或者:
ifstream input("my-file.txt");
vector<float> myValues;
myValues.insert(myValues.begin(),
istream_iterator<float>(input),
istream_iterator<float>());
但是,上面的代码将读取1D浮点数组,而不是您想要的2D数组。要读取2D数组,一个选项是一次读取文件的一行,然后使用上面代码的修改将该行拆分为单独的浮点数。例如:
ifstream input("my-file.txt");
vector< vector<float> > myValues;
for (string line; getline(input, line); ) {
stringstream lineStream(line);
vector<float> thisLine;
thisLine.insert(thisLine.begin(),
istream_iterator<float>(lineStream),
istream_iterator<float>());
myValues.push_back(thisLine);
}
希望这有帮助!
答案 1 :(得分:0)
您无法增加动态分配的数组的大小。事实上,堆上跟随它的内存可能已经被分配给其他内容。
使用自动处理调整大小的数据结构,而不是使用数组,例如嵌套std::vector
或std::list
取决于您的需求。