C++ 读取txt文件并使用c+快速解析它们+;和增强内存映射文件

C++ 读取txt文件并使用c+快速解析它们+;和增强内存映射文件,c++,file,boost,memory-mapped-files,C++,File,Boost,Memory Mapped Files,重要编辑: 问题不是我所说的,在手动评测之后,我明白了,当我将“file>>x>>y>>z;”替换为“file.readline(buffer,size);”时 它只需要0.4秒,所以问题完全不同,如何从行中解析浮动,file>>x>>y>>z (我不知道是否应该删除该问题,因为原来的问题不相关) ==OLD=== 在对Internet和堆栈溢出进行大量研究之后,我了解到用C++读取大型文件的最好方法是使用内存映射文件。 我有一个txt文件,15MB,每行有3个由空格分隔的浮点 我有这个密码:

重要编辑: 问题不是我所说的,在手动评测之后,我明白了,当我将“file>>x>>y>>z;”替换为“file.readline(buffer,size);”时

它只需要0.4秒,所以问题完全不同,如何从行中解析浮动,file>>x>>y>>z

(我不知道是否应该删除该问题,因为原来的问题不相关)

==OLD=== 在对Internet和堆栈溢出进行大量研究之后,我了解到用C++读取大型文件的最好方法是使用内存映射文件。 我有一个txt文件,15MB,每行有3个由空格分隔的浮点

我有这个密码:

ifstream file(path)
float x,y,z;
while(!file.eof())
  file >> x >> y >> z;
它可以在9.5秒内读取此文件

为了使用stackoverflow用户更快地读取文件,我提出了以下代码,如果我正确理解它,将使用内存映射文件,并且应该更快地读取它

#包括
#包括
#包括
名称空间io=boost::iostreams;
int main()
{
io::stream str(“test.txt”);
//您可以像从任何流一样从str中读取,str>>x>>y>>z
用于(浮动x,y,z;str>>x>>y>>z;)

std::cout流速度慢。部分原因是应用于它们的约束非常繁重,部分原因是实现有一种优化不足的趋势


尝试使用Boost.Spirit解析器。虽然语法需要一点适应,编译有时可能非常慢,但Spirit的运行时性能非常高。

Wow!读取15MB文件需要9.5秒?不是很大的文件。这里有些不对劲。
#include <iostream>
#include <boost/iostreams/stream.hpp>
#include <boost/iostreams/device/mapped_file.hpp>
namespace io = boost::iostreams;

int main()
{
    io::stream<io::mapped_file_source> str("test.txt");
    // you can read from str like from any stream, str >> x >> y >> z
    for(float x,y,z; str >> x >> y >> z; )
        std::cout << "Reading from file: " << x << " " << y << " " << z << '\n';
}