解析文件时可以使用 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
显示的数据,做你喜欢的所有操作。
我最近了解了 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
显示的数据,做你喜欢的所有操作。