Производительность функции обрезки

Моя старая функция обрезки:

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, который довольно старый, но я думаю, с тех пор этот код не сильно изменился.

Спасибо.

7
задан Igor Oks 30 November 2010 в 15:18
поделиться