std::make_heap
时间: 2023-09-16 20:11:29 浏览: 174
`std::make_heap` 是 C++ 标准库中的一个函数,位于 `<algorithm>` 头文件中。它用于将一个范围内的元素重新组织为一个堆结构。
函数原型如下:
```cpp
template <class RandomAccessIterator>
void make_heap(RandomAccessIterator first, RandomAccessIterator last);
```
参数 `first` 和 `last` 是迭代器,指定了要重新组织为堆的元素范围。范围 `[first, last)` 中的元素会被重新排列,形成一个堆结构。
`make_heap` 函数会根据元素的比较关系(默认使用 `operator<`)重排元素的顺序,将最大的元素放在堆顶。在堆结构中,父节点的值总是大于或等于其子节点的值。
使用 `make_heap` 函数可以方便地将一个容器或数组转换为堆,以便进行堆排序或其他基于堆的操作。
以下是一个示例,展示如何使用 `make_heap` 函数创建一个整型堆:
```cpp
#include <iostream>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> vec = {3, 1, 4, 1, 5, 9, 2, 6};
std::make_heap(vec.begin(), vec.end());
std::cout << "Heap: ";
for (const auto& num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
```
输出结果为:9 6 4 3 5 1 2 1,即将输入的无序整数序列转换为一个堆结构,并按照最大堆的规则进行排列。在这个示例中,我们使用 `std::vector` 存储整数,并通过 `make_heap` 函数将其转换为堆。最后,我们遍历堆并输出结果。
需要注意的是,`make_heap` 函数只会重新组织元素的顺序,不会添加或删除任何元素。如果需要在堆中添加或删除元素,可以使用 `push_heap` 和 `pop_heap` 函数。
阅读全文