将浮点数读入动态分配的数据,同时在读取文件时增加数组的大小

akh*_*288 0 c++ arrays file-io

我试图从文件中读取浮点数到动态分配的2D数组.我正在使用c ++.

在我的.txt文件中,行的元素由制表符空间分隔,每行以新行开头.

我的问题是 -

我可以根据编号增加数组的大小吗?文件中存在的元素(行和列)?如果是这样,请建议一种方法.

我想写了不.在文本文件的第一行上的行和列,并在开头读取它们以设置将为我的数组分配空间的循环限制.有没有更好的方法,可能基于文本文件的格式?这样,我认为它将更接近流数据类型的场景.

提前致谢.

AKHIL

tem*_*def 7

不要使用数组,而应考虑使用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)

希望这可以帮助!