gpt4 book ai didi

c++ - 在 C++ 中处理简单但大文件的有效方法

转载 作者:可可西里 更新时间:2023-11-01 17:52:52 27 4
gpt4 key购买 nike

我正在从事一个让我在性能方面有点头疼的项目。我的任务是读取大型(50MB 左右)粒子坐标文件并显示它们。我想为此使用 C++,因为我已经在学习它了。

文件中的坐标结构很简单,只有很多(比如一百万左右):

1234.5667 5234.1566 //coordinate 1  
8532.6123 5152.6612 //coordinate 2
....

作为菜鸟,我只想逐行读取文件并将它们存储在 vector 中,这是错误的吗?也许我应该先读取整个文件(缓冲?),然后解析值?

工作示例:

clock_t c1 = clock();
vector<double> coords;
double coord;
ifstream fin("file.txt");
while(fin >> coord) {
coords.push_back(coord);
}
cout << "done. " << coords.size()/2 << " coords read.\n";
cout << "took " << (clock() - c1)/(double)CLOCKS_PER_SEC << " seconds." << endl;

在一个 40MB 的文件上有 200 万个坐标的相应输出:

done. 2000000 coords read.
took 1.74 seconds.

这在我的脑海里很快,但我认为我的头脑不是一个好的判断者。

最佳答案

如果您知道“平均”文件有多大,您可能想使用 .reserve 预分配 vector 。

效率是一个棘手的游戏。前期不要耍花样,设计好基础算法。如果它不够快,您将开始查看 IO 例程,无论您是在创建任何“额外”对象(显式或隐式,尤其是在传递参数时)。

在您的示例中,您可能希望在打印摘要输出之前对 clock() 进行第二次调用——获得稍微更准确的计时! :)

关于c++ - 在 C++ 中处理简单但大文件的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2078290/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com