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