前言
stl_algo.h
文件中有很多的算法实现, 在这里STL分析中挑选几个函数进行分析, 其他的算法大家有兴趣可以自己看看, 本节分析stl_algo.h
文件中的rotate
算法. 该算法实现的功能是将[first, middle), [middle, last)两段区间的元素进行交换.
rotate分析
template <class ForwardIterator>
inline void rotate(ForwardIterator first, ForwardIterator middle, ForwardIterator last)
{
if (first == middle || middle == last) return;
// 三个迭代器 : first, middle, last
__rotate(first, middle, last, distance_type(first), iterator_category(first));
}
forward_iterator_tag 版本
需要注意 :
- first是前段部分的指针
- i 表示的是后段部分的指针
template <class ForwardIterator, class Distance>
void __rotate(ForwardIterator first, ForwardIterator middle,
ForwardIterator last