解析简单分隔字符串的 C++ 20 方法
The c++ 20 way to parse a simple delimited string
这里有很多关于如何解析分隔字符串的问题和答案。我正在寻找 C++20 左右的答案。以下作品,但感觉有所欠缺。有什么更优雅的建议吗?
const std::string& n = "1,2,3,4";
const std::string& delim = ",";
std::vector<std::string> line;
for (const auto& word : std::views::split(n, delim)) {
line.push_back(std::string(word.begin(), word.end()));
}
不需要创建std::string
类型的子串,可以使用std::string_view
来避免不必要的内存分配。
随着C++23的引入ranges::to
,这可以写成
const std::string& n = "1,2,3,4";
const std::string& delim = ",";
const auto line = n | std::views::split(delim)
| std::ranges::to<std::vector<std::string_view>>();
这里有很多关于如何解析分隔字符串的问题和答案。我正在寻找 C++20 左右的答案。以下作品,但感觉有所欠缺。有什么更优雅的建议吗?
const std::string& n = "1,2,3,4";
const std::string& delim = ",";
std::vector<std::string> line;
for (const auto& word : std::views::split(n, delim)) {
line.push_back(std::string(word.begin(), word.end()));
}
不需要创建std::string
类型的子串,可以使用std::string_view
来避免不必要的内存分配。
随着C++23的引入ranges::to
,这可以写成
const std::string& n = "1,2,3,4";
const std::string& delim = ",";
const auto line = n | std::views::split(delim)
| std::ranges::to<std::vector<std::string_view>>();