【发布时间】:2014-05-29 17:23:35
【问题描述】:
我有一个用 Visual Studio 2010 编写的 C++ 代码,它读取一个文本文件(其中包含由空格分隔的数万个浮点数)。代码读取文本文件内容并将其存储到浮点向量中。我的问题是,代码需要花费大量时间来读取和复制到矢量。有没有更快的方法来做到这一点。可以在 Visual Studio C++ 中完成一些事情(使用 boost 库或 mmap)
vector<float> ReplayBuffer;
ifstream in;
in.open("fileName.txt");
if(in.is_open())
{
in.setf(ios::fixed);
in.precision(3);
in.seekg(0,ios::end);
fileSizes = in.tellg();
in.seekg(0,ios::beg);
while(!in.eof())
{
for(float f;in>>f;)
ReplayBuffer.push_back(f);
}
in.close();
}
【问题讨论】:
-
所有可以替换为
vector<float> ReplayBuffer{std::istream_iterator<float>(in >> std::fixed >> std::setprecision(3)), std::istream_iterator<float>()}。 -
输入时不使用精度和格式字段。并且您在外循环中的循环条件可能会导致无限循环(例如,如果存在格式错误)。
-
@0x499602D2 这将是读取文件的最简单方法(并且不会导致格式错误的无限循环)。
-
这将是迄今为止最好的,但不幸的是OP使用的是VS2010并且没有标记C++11
标签: c++ visual-studio-2010 text