【发布时间】:2010-11-30 14:23:00
【问题描述】:
我的旧修剪功能:
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);
}
我决定用 boost 代替它,并写了一些琐碎的代码:
string TailTrimString (const string & sSource, const char *chars) {
return boost::algorithm::trim_right_copy_if(sSource,boost::algorithm::is_any_of(chars));
}
我惊讶地发现新功能的运行速度要慢得多。
我做了一些分析,我看到函数is_any_of 很慢。
boost 的实现是否可能比我非常简单的实现慢?为了提高性能,我应该使用什么来代替is_any_of?
我还在 boost 的邮件列表中找到了一个 discussion 关于这个问题,但我仍然不确定如何提高我的代码的性能。
我使用的 boost 版本是 1.38,相当老了,但我想这段代码从那时起并没有太大变化。
谢谢。
【问题讨论】:
-
你为什么不使用你的旧实现?它速度很快,并且产生了预期的结果。
-
为什么要重新实现一个工作函数?
-
我重新实现它只是因为我希望 boost 能够提供更好的性能。我还是不明白,为什么boost的性能更差。
-
@Igor Oks:因为它使用了更多的抽象。这里运行的 boost 代码(在幕后)可能有几百行,而不是几个字符串操作。
-
@Igor:您是否分析了您的代码并确定 TailTrimString 是一个需要修复的问题?
标签: c++ performance boost stl trim