gpt4 book ai didi

c++ - 将数据从 std::vector 写入文本文件的快速方法

转载 作者:IT老高 更新时间:2023-10-28 13:58:12 30 4
gpt4 key购买 nike

我目前将一组 double 从 vector 写入文本文件,如下所示:

std::ofstream fout;
fout.open("vector.txt");

for (l = 0; l < vector.size(); l++)
fout << std::setprecision(10) << vector.at(l) << std::endl;

fout.close();

但这需要很长时间才能完成。有没有更快或更有效的方法来做到这一点?我很想看到并学习它。

最佳答案

std::ofstream fout("vector.txt");
fout << std::setprecision(10);

for(auto const& x : vector)
fout << x << '\n';

理论上,我更改的所有内容在您的代码版本中性能更差,但 std::endl was the real killer . std::vector::at (使用边界检查,您不需要)将是第二个,然后是您没有使用迭代器的事实。

当您可以一步完成时,为什么要默认构造一个 std::ofstream 然后调用 open?当 RAII(析构函数)为您处理它时,为什么要调用 close?你也可以调用

fout << std::setprecision(10)

只有一次,在循环之前。

如以下评论中所述,如果您的 vector 是基本类型的元素,则使用 for(auto x : vector) 可能会获得更好的性能。测量运行时间/检查装配输出。


只是指出另一件引起我注意的事情,这个:

for(l = 0; l < vector.size(); l++)

这个l是什么?为什么要在循环之外声明它?看来您在外部范围内不需要它,所以不要。还有 post-increment .

结果:

for(size_t l = 0; l < vector.size(); ++l)

很抱歉,我对这篇文章进行了代码审查。

关于c++ - 将数据从 std::vector 写入文本文件的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39753721/

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