解析文件时可以使用 std::string_view 和 getline 吗?

Can I use std::string_view with getline when parsing a file?

我最近了解了 std::string_view 以及它如何比分配字符串快得多,所以我尝试尽可能使用它来代替 std::string。

有没有一种方法可以优化逐行解析文件的循环以使用 std::string_view 代替?

这是我正在处理的代码。

    std::string line;

    // loop until we find the cabbage tag
    while (std::getline(csd, line))
    {
        //DO STUFF
        if (line.find("</STOP>") != std::string::npos)
            break;
    }

没有。一个 string_view 是:

  • 对某些存储的持续查看,因此您无法读取 string_view
  • 不拥有该存储,而是“引用”一些其他存储,因此 getline 无处放置它读取的信息。

但是,一旦您将数据读入 string,您可以制作一个 string_view 并将其传递给例程进行解析(避免在这种情况下传递副本)。

您正在寻找的是 mmap,它允许您读取文件数据而无需复制它们。从 C++ 中的流中读取将始终复制数据。当然,你可以用std::string_view指向mmap显示的数据,做你喜欢的所有操作。