akh*_*288 0 c++ arrays file-io
我试图从文件中读取浮点数到动态分配的2D数组.我正在使用c ++.
在我的.txt文件中,行的元素由制表符空间分隔,每行以新行开头.
我的问题是 -
我可以根据编号增加数组的大小吗?文件中存在的元素(行和列)?如果是这样,请建议一种方法.
我想写了不.在文本文件的第一行上的行和列,并在开头读取它们以设置将为我的数组分配空间的循环限制.有没有更好的方法,可能基于文本文件的格式?这样,我认为它将更接近流数据类型的场景.
提前致谢.
AKHIL
不要使用数组,而应考虑使用a std::vector,它会自动调整大小.在C++中,这非常适合使用原始数组,因为它更安全并且隐藏了资源管理.
实际上,std::vector结合使用流库,可以非常轻松地读取以制表符分隔的浮点值文件:
ifstream input("my-file.txt");
vector<float> myValues;
for (float f; input >> f; )
myValues.push_back(f);
Run Code Online (Sandbox Code Playgroud)
或者,或者:
ifstream input("my-file.txt");
vector<float> myValues;
myValues.insert(myValues.begin(),
istream_iterator<float>(input),
istream_iterator<float>());
Run Code Online (Sandbox Code Playgroud)
但是,上面的代码将读取一维浮点数,而不是您想要的二维数组.要读取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);
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!