【问题标题】:Is it necessary to use .str() for storing match.suffix() in regex_search?是否有必要使用 .str() 将 match.suffix() 存储在 regex_search 中?
【发布时间】:2019-07-22 00:10:05
【问题描述】:

我必须为 regex_search 使用匹配结果的后缀。我拥有的字符串大约有百万行,仅将其分配给临时字符串平均需要 30 毫秒。 如果我不使用 .str(),即使这样,程序也可以正常工作,平均需要 30 毫秒。使用时间参考只是为了比较。

regex_search(input, match, re);
tempStr = match.suffix().str();

如果时间(毫秒)没有显着差异,请告诉我 .str() 的用途。

【问题讨论】:

  • 请发布您用于构建程序的编译标志。如果您正在计时未优化或“调试”构建,那么您显示的计时是没有意义的。
  • @PaulMcKenzie 我正在使用 Visual Studio,很抱歉我不知道如何在其中设置编译标志。忽略时间,你能告诉我 .str() 的用途吗?提前致谢。
  • 您是在计时“发布”构建还是“调试”构建?如果它是一个“调试”版本,那么停止你正在做的事情并构建一个发布版本和时间。
  • 您的意思是使用 .str() 是否有任何影响,或者在发布版本中百万行不会花费 30 毫秒?
  • 请运行发布版本。在你这样做之前,这个问题毫无价值。这就是我要说的。关于 SO 有很多问题,其中的问题是“为什么做 x 慢?”,事实证明,提出问题的人正在运行未优化的构建。运行优化的构建后,时间就会“更正”,因此问题会关闭、删除等。

标签: c++ regex string


【解决方案1】:

在regex_search中存储match.suffix()是否需要使用.str()?

没有。 match.suffix() 隐式转换为string,效果相当于调用.str()

我猜只有在类型推导存在的情况下才需要显式调用.str()

auto match(std::regex re, std::string s) {
    std::smatch m;
    std::regex_match(s, m, re);
    // return m.suffix(); // bad: the return value is dangling
    return m.suffix().str(); // OK: copies the matched part
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 2019-04-25
    • 2022-01-24
    相关资源
    最近更新 更多