【发布时间】:2020-07-31 18:22:31
【问题描述】:
我正在处理 CSV 并使用以下代码来处理一行。
std::vector<std::string> string_to_vector(const std::string& s, const char delimiter, const char escape) {
std::stringstream sstr{s};
std::vector<std::string> result;
while (sstr.good()) {
std::string substr;
getline(sstr, substr, delimiter);
while (substr.back() == escape) {
std::string tmp;
getline(sstr, tmp, delimiter);
substr += "," + tmp;
}
result.emplace_back(substr);
}
return result;
}
它的作用: 函数根据delimiter 分解字符串s。如果分隔符用escape 转义,则分隔符将被忽略。
此代码有效,但速度非常慢。 如何加快速度?
你知道任何现有的 csv 处理实现可以完全做到这一点并且我可以使用吗?
【问题讨论】:
-
FWIW,您应该将
getline(sstr, substr, delimiter)移动到 while 条件中,而不是使用sstr.good()。您应该始终使用读取操作来控制读取循环。更多信息:stackoverflow.com/questions/5605125/… -
while (sstr.good())不太好。 -
您可以将
move和substr放入结果向量中 -
"如何加快速度?" - 使用编译器优化启用编译你的代码是显而易见的第一个建议(注意:这通常不是你构建代码时的默认设置,你需要采取明确的步骤来这样做)。
-
result.emplace_back(std::move(substr));
标签: c++ string performance csv stringstream