OK. Я не говорю, что это будет быстрее, чем чтение из файла
Но это метод, при котором вы создаете буфер один раз, а после того, как данные считываются в буфер, используйте его непосредственно в качестве источника для потока строк.
N.B. Стоит отметить, что std :: ifstream буферизован. Он читает данные из файла в виде (относительно больших) кусков. Потоковые операции выполняются с буфером, возвращающимся в файл только для следующего чтения, когда требуется больше данных. Поэтому, прежде чем засосать все данные в память, убедитесь, что это горлышко бутылки.
#include <fstream>
#include <sstream>
#include <vector>
int main()
{
std::ifstream file("Plop");
if (file)
{
/*
* Get the size of the file
*/
file.seekg(0,std::ios::end);
std::streampos length = file.tellg();
file.seekg(0,std::ios::beg);
/*
* Use a vector as the buffer.
* It is exception safe and will be tidied up correctly.
* This constructor creates a buffer of the correct length.
*
* Then read the whole file into the buffer.
*/
std::vector<char> buffer(length);
file.read(&buffer[0],length);
/*
* Create your string stream.
* Get the stringbuffer from the stream and set the vector as it source.
*/
std::stringstream localStream;
localStream.rdbuf()->pubsetbuf(&buffer[0],length);
/*
* Note the buffer is NOT copied, if it goes out of scope
* the stream will be reading from released memory.
*/
}
}