Как временно хранить данные в потоке, прежде чем хранить их в структуре данных?

Итак, я работаю над чтением большого текстового файла (100 КБ + символов) и сохранением его в большом массиве символов.

Я провел мозговой штурм, чтобы найти наилучший алгоритм для этого. Теперь я знаю, что чтение файла является дорогой операцией с точки зрения временной сложности.

До сих пор я придумал это, используя C ++:

    //Opening the text file from the path given
char * dataset;
int dataLength;
ifstream in(path);
if (!in) {
cout << "Could not open the file." << endl;
exit(-1);
}

//Calculating the number of characters in the file
in.ignore(numeric_limits<streamsize>::max());
dataLength = in.gcount();

//Clearing since EOF bit is set after ignore method above
in.clear();
in.seekg(0, ifstream::beg);

//Initializing the dataset array and copying the data
dataset = new T[dataLength + 1];
in.read(dataset, dataLength);
dataset[dataLength] = '\0';

Я не читаю символ за символом, поскольку это делает очень дорогостоящую операцию. Теперь, пытаясь улучшить его, я подумал, что будет способ не читать файл дважды.

В моем алгоритме я должен сначала прочитать его (используя .ignore), чтобы подсчитать количество символов, чтобы я мог создать динамический массив символов. И тогда я должен прочитать его, чтобы сохранить его в массив символов.

Есть ли способ, что когда я читаю файл в первый раз, я могу временно сохранить данные в потоке, инициализировать массив и затем попросить поток скопировать данные в мою структуру данных (массив)

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …