我有一个带有~4 mio浮点数的文本文件,即30MB,我想把它们读成<html>
<head>
</head>
<body>
<!-- multiline "comment" below using textarea style="display:none;" -->
<textarea style="display:none;">
<script>
alert("which won't show up..");
</script>
Hello world!
<!-- Look at me, I'm a comment :) -->
<div>Yeah, whatever, I'm an element..</div>
</textarea>
<span>Who cares, span is the man, the only visible one anyway!</span>
</body>
</html>
。
我的代码非常简单,完成工作
vector<float>
问题是现代桌面工作站需要20到30秒。起初我假设我做了一些愚蠢的事情,但是我对代码的反应越多,我开始接受的就越多,可能只是将所有ascii浮点值解析为std::fstream is("data.txt", std::ios_base::in);
float number;
while (is >> number)
{
//printf("%f ", number);
number_vec.push_back(number);
}
然而,我记得Matlab几乎可以立即读取和解析同一个文件(磁盘速度似乎是极限),所以很明显我的代码效率非常低。
我唯一能想到的是提前在矢量中保留所需的元素,但它根本没有改善情况。
有人可以帮助我理解为什么吗?并且可能有助于编写更快的解决方案?
编辑文本文件如下所示:
152.00256 45.8569 5.87214 0.225 -0.0005 .....
即。一行,空格分隔。
答案 0 :(得分:0)
请考虑查看@gsamaras和@Brad Allred分享的可能重复项。无论如何,我将尝试回答一个简单的答案,旨在保持代码简洁/友好,并考虑以下两个前提:
根据这些陈述的约束和思维方式,我的主要建议是预先分配容器,浮动向量作为内部iostream缓冲区: