1

假设我们已经将一个文本文件的内容读入了一个stringstreamvia

std::ifstream file(filepath);
std::stringstream ss;
ss << file.rdbuf();

现在想逐行处理文件。这可以通过

for (std::string line; std::getline(ss, line);)
{
}

但是,考虑到ss在内部缓冲区中包含文件的全部内容(并且我们可以string通过 via获取此内容ss.str()),上面的代码效率非常低。对于文件的每一行,都会进行内存分配和复制操作。

是否有可能提出一个以 aline形式提供 s的解决方案std::string_view?(随意使用其他机制来加载整个文件;我不需要通过 . 访问它stringstream。)

4

1 回答 1

-1

上面的代码效率很低。对于文件的每一行,都会进行内存分配和复制操作。

是否有可能想出一个以 std::string_view 形式提供行的解决方案?

不,据我所知。

但是您可以使用接收指向 a 的指针的getline()方法。stringstreamchar

一些东西(注意:代码未经测试)

constexpr std::size_t dim { 100U }; // choose you the dim

char buff[dim];

while ( ss.getline(buff, dim) )
 {
   // do something
 }

副本仍然存在,但至少,这样你应该避免 - 为每一行 - 分配。

于 2018-04-06T22:07:08.963 回答