为什么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;
}
}
Run Code Online (Sandbox Code Playgroud)
我有两个完全相同的插入排序算法,除了一个使用std::rotate,一个使用cplusplus.com的等效函数.我正在设置它们用1000个int元素排序1000个向量.使用的排序std::rotate需要0.376秒,而另一个需要8.181秒.
为什么是这样?我不打算尝试做出比STL功能更好的东西,但我仍然很好奇.