C++ STL学习——heap
程序员文章站
2023-03-22 09:45:56
heap堆其实是一种比较复杂的数据结构,尤其涉及到建堆和调整堆的时候。好在在STL中已经封装了heap的一些操作,可以让我们比较方便的使用堆。比如判断堆,删除一个元素,插入一个元素...
heap堆其实是一种比较复杂的数据结构,尤其涉及到建堆和调整堆的时候。好在在STL中已经封装了heap的一些操作,可以让我们比较方便的使用堆。比如判断堆,删除一个元素,插入一个元素,以及堆排序。示例代码上传至 https://github.com/chenyufeng1991/STL_heap。
(1)首先导入头文件
(2)这里使用数组来存储一个堆,也就是堆化数组,为了方便使用,我把数组转化为vector来操作。
int arr[] = {4,5,6,7,8,1}; vectorvectorArr(arr,arr + sizeof(arr) / sizeof(int));(3)is_heap:判断堆
cout <<"-"<此时输出肯定为false;
(4)make_heap:构造堆// 构造最大堆 make_heap(vectorArr.begin(), vectorArr.end(), less()); cout <<"_ _"< 注意make_heap的第三个参数中,less()为构造最大堆,greater()为构造最小堆。此时判断is_heap即为true;(vectorarr.begin(),>(5)push_heap:插入元素
// 向堆中插入一个元素,默认插入在顶部 vectorArr.push_back(100); cout << "_ _ _"< 如果要在堆中插入一个元素,首先要往容器vector尾部中插入该元素,然后再使用push_heap调整堆。(vectorarr.begin(),>(6)pop_heap:弹出元素
// 弹出一个元素,默认是首元素和尾元素交换,交换以后就不是正确的堆了;真正的删除需要去vector里面pop; pop_heap(vectorArr.begin(), vectorArr.end()); cout <<"_ _ _ _ _"< 弹出的元素默认的是根节点的元素,然后在用尾元素放到根节点处,然后再调整。 pop_heap之后并没有真正删除该元素,最后是使用容器pop_back来删除的。(vectorarr.begin(),>(7)sort_heap:堆排序
// 堆排序, 堆排序后 sort_heap(vectorArr.begin(), vectorArr.end()); cout <<"_ _ _ _ _ _ _"< 堆排序后不是一个真正的堆了,只是完成了排序。(vectorarr.begin(),>
上一篇: ASP 3.0高级编程(十二)
下一篇: ASP 3.0高级编程(十八)