23 сентября 2007

Trim

Всегда было интересно - почему реализации функции trim либо изменяют исходную строку, либо генерируют новую? Ведь результат функции - это подстрока, а ее можно задать парой итераторов. Тогда не потребуется никакого лишнего копирования:
template <typename TStringIterator>
std::pair<TStringIterator, TStringIterator> Trim(
TStringIterator Begin, TStringIterator End,
const std::locale& Locale = std::locale())
{
std::pair<TStringIterator, TStringIterator> Result(
::boost::algorithm::detail::trim_begin(Begin, End, boost::is_space(Locale)),
::boost::algorithm::detail::trim_end(Begin, End, boost::is_space(Locale)));
if (Result.first > Result.second)
Result.first = Result.second;
return Result;
}
PS. Вместо std::pair можно вернуть boost::iterator_range.

Комментариев нет: