Моя старая функция обрезки:
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);
}
Вместо нее я решил использовать ускорение и написал тривиальное выражение:
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
, чтобы улучшить производительность?
Я также нашел обсуждение по этому поводу в списке рассылки буста, но я до сих пор не уверен, как мне улучшить производительность своего кода.
Я использую буст-версию 1.38, который довольно старый, но я думаю, с тех пор этот код не сильно изменился.
Спасибо.