一 <stl_algo.h>概述:
定义于SGI<stl_algo.h>内的所有算法包含:heap算法(定义于<stl_heap.h>中,stl_algo.h包含<stl_heap.h>);set相关算法和其它的算法。
二 heap算法
(1)定义于<stl_heap.h>中,被<stl_algo.h>头文件#include。
(2)具体算法:
*make_heap():
*push_heap():
*pop_heap():
*sort_heap():
三 set相关算法(与常规的集合操作不同)
(1)set_unoin:
(2)set_difference:
(3)set_intersection:
(4)set_symmetric_difference:
四 sort(只适用于vector和deque):
(1)格式
template<typename _RandomAccessIterator>
inline void sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
sort算法接受两个RandomAccessIterators,然后将区间内的所有元素以渐增方式由小到大重新排列;第二个版本允许用户指定一个函数对象作为排序准则。
只适用于vector和deque,原因:
*STL的关联容器都具有自动排序功能,不需要sort算法。
*序列式容器中的stack、queue和priority_queue都具有特定的出入口,不允许用户对其排序。
*序列式容器中剩下的list的迭代器是BidirectionalIterators,不适合sort算法,slist的迭代器是ForwardIterators,也不适合sort算法,所以list和slist自带自己的成员函数sort。
(2)STL的sort算法,数据量大时采用Quick Sort,分段递归排序,一旦分段后数据量小于一个门槛,为避免Quick Sort的递归调用带来的额外负荷(overhead),就改用Insertion Sort,如果递归层次过深还会采用Heap Sort。
Quick Sort:采取三点中值的方法(采取头、中、尾三个位置的中值,不是平均值,作为枢纽值)。
五 其它算法(详见实现文件<stl_algo.h >)