std::make_heap, std::pop_heap, std::push_heap, std::sort_heap

std::make_heap

#include 
#include 
#include 

int main()
{
	std::vector<int> vec{ 10,20,30,5,15 };

	std::make_heap(vec.begin(), vec.end());

	for (auto it : vec)
	{
		std::cout << it << "  ";  // 输出 30 20 10 5 15
	}
	std::cout << std::endl;

	return 0;
}

std::push_heap

#include 
#include 
#include 

int main()
{
	std::vector<int> vec{ 10,20,30,5,15 };

	std::make_heap(vec.begin(), vec.end());  // 对vec构造heap

	vec.push_back(99);

	std::push_heap(vec.begin(), vec.end());  // 对新的vec构造heap
	for (auto it : vec)
	{
		std::cout << it << "  ";  // 输出 99 20 30 5 15 10
	}
	std::cout << std::endl;

	return 0;
}

std::sort_heap

#include 
#include 
#include 

int main()
{
	std::vector<int> vec{ 10,20,30,5,15 };

	std::make_heap(vec.begin(), vec.end());

	// vec.push_back(16);   // 此句会使vec不是heap,无法进行sort_heap
	vec.push_back(6);       // 此句执行后vec仍然是heap,不影响sort_heap操作

	// sort_heap的对象一定是个heap,如果在sort_heap之前heap被修改,变成不是heap了那么是没法用sort_heap的,如果修改后仍是heap则没影响
	std::sort_heap(vec.begin(), vec.end()); 
	for (auto it : vec)
	{
		std::cout << it << "  ";  // 输出 5 6 10 15 20 30
	}
	std::cout << std::endl;

	return 0;
}

std::pop_heap

#include 
#include 
#include 

int main()
{
	std::vector<int> v{ 10,20,30,5,15 };
	v.push_back(99);

	std::make_heap(v.begin(), v.end());  // 99 20 30 5 15 10

	// 将第一个元素与最后一个元素互换之后,再将除最后一个元素重组织成堆
	std::pop_heap(v.begin(), v.end());   // 99 20 30 5 15 10 ==> 10 20 30 5 15 99 ==> 30 20 10 5 15 99
	for (auto &it : v)
	{
		std::cout << it << std::endl;;
	}

	return 0;
}

你可能感兴趣的:(C++)