make_heap(), pop_heap(), push_heap()用法

对make_heap(), pop_heap(), push_heap()的用法做个总结: 

需要添加头文件:

#include

 

make_heap()

make_heap(_RAIter,_RAIter),make_heap(_RAIter,_RAIter,_Compare)

生成堆,他有两个参数,也可以有三个参数,前两个参数是指向开始元素的迭代器和指向结束元素的下一个元素的迭代器。第三个参数是仿函数可选的,可以用仿函数less()和greater()来生成大顶堆和小顶堆。如果只传入前两个参数,默认是生成大顶堆。 

举例:

vectorans  = {2,4,6,8,10,1,3,5,7,9};

make_heap(ans.begin(),ans.end()); //大顶堆

make_heap(ans.begin(),ans.end(),less()); //还是大顶堆

make_heap(ans.begin(),ans.end(),greater()); //小顶堆


 

push_heap()

push_heap(_RAIter,_RAIter) 默认为大顶堆,push_heap(_RAIter,_RAIter,_Compare) 

参数与make_heap()相同,需要注意的是,只有make_heap()和push_heap()同为大顶堆或小顶堆,才能插入。 

堆调整,push_heap()是在堆的基础上进行数据的插入操作,调用push_heap之前必须调用make_heap创建一个堆。

首先数组push_back插入元素,然后再调用push_heap,它会使最后一个元素插到合适位置。

举例:

vectorans  = {2,4,6,8,10,1,3,5,7,9};
make_heap(ans.begin(),ans.end(),less());

ans.push_back(100);
push_heap(ans.begin(),ans.end());  // 与push_heap(ans.begin(),ans.end(),less())相同

 

pop_heap()

pop_heap(_RAIter,_RAIter),pop_heap(_RAIter,_RAIter,_Compare)

pop_heap()是在堆的基础上,弹出堆顶元素。这里需要注意的是,pop_heap()并没有删除元素,而是将堆顶元素和数组最后一个元素进行了替换,如果要删除这个元素,还需要对数组进行pop_back()操作。 

举例:

vectorans  = {2,4,6,8,10,1,3,5,7,9};
make_heap(ans.begin(),ans.end(),less());  //此时数组为10 9 6 8 4 1 3 5 7 2

ans.push_back(100);   //此时数组为10 9 6 8 4 1 3 5 7 2 100
push_heap(ans.begin(),ans.end());  //此时数组为100 10 6 8 9 1 3 5 7 2 4

pop_heap(ans.begin(),ans.end()); //此时数组为  10 9 6 8 4 1 3 5 7 2 100

ans.pop_back();  //此时数组为  10 9 6 8 4 1 3 5 7 2
   

你可能感兴趣的:(STL)