我旧的修剪函数:
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的邮件列表中也发现了这个问题的讨论,但我仍然不确定如何改进代码的性能。我使用的boost版本是1.38,这是相当旧的版本,但我猜这段代码从那时起并没有太大变化。谢谢。
assign
(而不是substr
)-如果仍然是瓶颈,您可以尝试使用C函数进行重写... - Nim