更新:请确保检查初始答案下方的(令人惊讶的)更新
内存映射文件为我提供了很好的服务1:
#include // for mmap
#include // for std::find
#include // for std::cout
#include
int main()
{
boost::iostreams::mapped_file mmap("input.txt", boost::iostreams::mapped_file::readonly);
auto f = mmap.const_data();
auto l = f + mmap.size();
uintmax_t m_numLines = 0;
while (f && f!=l)
if ((f = static_cast(memchr(f, '\n', l-f))))
m_numLines++, f++;
std::cout << "m_numLines = " << m_numLines << "\n";
}
这应该相当快。
更新
如果可以帮助您测试此方法,以下是直接使用wc而不是使用Boost的版本:请在Coliru上实时查看
#include
#include
#include
// for mmap:
#include
#include
#include
cons