修剪功能的性能

Igo*_*Oks 7 c++ performance boost stl trim

我的旧修剪功能:

string TailTrimString (const string & sSource, const char *chars) {
  size_t End = sSource.find_last_not_of(chars);
  if (End == string::npos) {
    // only "*chars"
    return "";
  }
  if (End == sSource.size() - 1) {
    // noting to trim
    return sSource;
  }
  return sSource.substr(0, End + 1);
}
Run Code Online (Sandbox Code Playgroud)

而不是它我决定使用boost,写下了琐碎的事情:

string TailTrimString (const string & sSource, const char *chars) {
    return boost::algorithm::trim_right_copy_if(sSource,boost::algorithm::is_any_of(chars));
}
Run Code Online (Sandbox Code Playgroud)

我惊讶地发现新功能的工作速度要慢得多.我做了一些分析,我发现这个功能is_any_of非常慢.

boost的实现是否可能比我非常简单的实现慢?有什么我应该使用而不是is_any_of为了提高性能?

我还在boost的邮件列表中找到了关于此问题的讨论,但我仍然不确定如何提高代码的性能.

我使用的升级版本是1.38,这是相当古老的,但我想这段代码从那以后没有太大变化.

谢谢.

Joh*_*ing 4

boost 的实现有可能比我相当简单的实现慢吗?

当然。

为了提高性能,我应该使用什么来代替 is_any_of 吗?

是的——你的原始代码。你没有说它有缺陷,也没有说你使用 boost 重新实现它的原因。如果原始代码中没有缺陷,那么就没有正当理由放弃原始实现。

将 Boost 引入代码库是有意义的。它带来了许多有用的功能。但仅仅为了使用新技术而放弃某个功能是一个很大的新手错误。

编辑:

回复您的评论:

我还是不明白,为什么boost的性能更差。

旨在为特定应用程序完成一项特定工作的手工函数通常比通用解决方案更快。Boost 是一个很棒的通用工具库,可以节省大量编程工作并减少大量缺陷。但它很通用。您可能只需要以特定方式修剪琴弦,但 Boost 可以处理所有事情。这需要时间。