Почему std::rotate
намного быстрее, чем эквивалентная функция, описанная cplusplus.com?
Внедрение cplusplus.com:
template <class ForwardIterator>
void rotate (ForwardIterator first, ForwardIterator middle, ForwardIterator last)
{
ForwardIterator next= middle;
while (first != next)
{
swap (*first++, *next++);
if(next == last)
next= middle;
else if (first==middle)
middle= next;
}
}
У меня есть два алгоритма сортировки вставки, которые полностью идентичны, за исключением того, что один использует std::rotate
, а один использует эквивалентную функцию cplusplus.com. Я устанавливаю их для сортировки 1000 векторов с 1000 элементами int
. Сорт, который использует std::rotate
занимает 0,766 секунды, а другой - 8,181 секунды.
Почему это? Я не собираюсь пытаться сделать что-то лучше, чем функции STL, но мне все еще интересно.