五 STL算法(二)stl_algo.h

来源:互联网 发布:什么是淘宝店铺首页 编辑:程序博客网 时间:2024/06/05 03:22

一  <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 >)


原创粉丝点击