五 STL算法(二)stl_algo.h

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


编译错误 测试用例通过率:0% In file included from /usr/include/c++/9/algorithm:62, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:65, from Main.cc:1: /usr/include/c++/9/bits/stl_algo.h: In instantiation of ‘void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<const int*, std::vector<int> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<std::greater<int> >]’: /usr/include/c++/9/bits/stl_algo.h:1890:25: required from ‘void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<const int*, std::vector<int> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<std::greater<int> >]’ /usr/include/c++/9/bits/stl_algo.h:1976:31: required from ‘void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<const int*, std::vector<int> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<std::greater<int> >]’ /usr/include/c++/9/bits/stl_algo.h:4905:18: required from ‘void std::sort(_RAIter, _RAIter, _Compare) [with _RAIter = __gnu_cxx::__normal_iterator<const int*, std::vector<int> >; _Compare = std::greater<int>]’ Main.cc:19:46: required from here /usr/include/c++/9/bits/stl_algo.h:1857:17: error: assignment of read-only location ‘__first.__gnu_cxx::__normal_iterator<const int*, std::vector<int> >::operator*()’ 1857 | *__first = _GLIBCXX_MOVE(__val); | ^ In file included from /usr/include/c++/9/bits/stl_algo.h:61, from /usr/include/c++/9/algorithm:62, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:65, from Main.cc:1: /usr/include/c++/9/bits/stl_heap.h: In instantiation of ‘void std::__pop_heap(_RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare&) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<const int*, std::vector<int> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<std::greater<int> >]’: /usr/include/
最新发布
07-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值