Вместо использования массива рассмотрите возможность использования 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>());
Однако приведенный выше код будет считывать одномерный массив с плавающей точкой, а не двумерный массив, который вы хотели. Чтобы прочитать двумерный массив, можно прочитать одну строку файла за раз, а затем использовать модификацию приведенного выше кода, чтобы разбить эту строку на отдельные числа с плавающей точкой. Например:
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);
}
Надеюсь, это поможет!