假设我们已经通过
将文本文件的内容读入stringstream
std::ifstream file(filepath);
std::stringstream ss;
ss << file.rdbuf();
现在想要逐行处理文件。这可以通过
完成for (std::string line; std::getline(ss, line);)
{
}
但是,请记住ss
包含内部缓冲区中文件的全部内容(并且我们可以通过string
将此内容作为ss.str()
获取),代码以上是非常低效的。对于文件的每一行,执行内存分配和复制操作。
是否有可能提出以line
形式提供std::string_view
的解决方案? (可以随意使用其他机制加载整个文件;我不需要通过stringstream
访问它。)
答案 0 :(得分:-1)
上面的代码非常低效。对于文件的每一行,执行内存分配和复制操作。
是否有可能提出一个以std :: string_view形式提供行的解决方案?
不,据我所知。
但您可以使用getline()
中的stringstream
方法接收指向char
的指针。
某事(警告:代码未经测试)
constexpr std::size_t dim { 100U }; // choose you the dim
char buff[dim];
while ( ss.getline(buff, dim) )
{
// do something
}
副本仍然存在,但至少,这样你应该避免 - 对于每一行 - 分配。