#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void print(int& i)
{
cout << i << '\t';
}
int main(int argc, char* argv[])
{
int a[] = { 12, 1, 20, 15, 30 };
vector<int> ivec(a, a + sizeof(a) / sizeof(a[0]));
for_each(ivec.begin(), ivec.end(), print);
cout << endl;
make_heap(ivec.begin(), ivec.end(), greater<int>()); // 建堆,会改变原始的vector中元素的顺序。greater<int>()指要建小顶堆
for_each(ivec.begin(), ivec.end(), print);
cout << endl;
pop_heap(ivec.begin(), ivec.end()); // 将root(即最小的那个元素)和vector中的最后一个元素交换,将除了最后一个元素之外的元素调整成堆
int& i = ivec.back(); // 取得最后的那个元素
cout << "root: " << i << endl;
ivec.pop_back(); // 移除最后的那个元素,即最小的那个元素
for_each(ivec.begin(), ivec.end(), print);
cout << endl;
ivec.push_back(99); // 往vector的尾部增加一个元素
push_heap(ivec.begin(), ivec.end()); // 将增加的元素加入小顶堆中(调整成堆)
for_each(ivec.begin(), ivec.end(), print);
cout << endl;
sort_heap(ivec.begin(), ivec.end()); // 堆排序,排序后就不再是堆了
for_each(ivec.begin(), ivec.end(), print);
cout << endl;
return 0;
}
// g++ heap.cpp -o heap -g -Wall
/*
greater:
12 1 20 15 30
1 12 20 15 30
30 12 20 15
99 30 20 15 12
12 15 20 30 99
*/
/*
less:
12 1 20 15 30
30 15 20 12 1
20 15 1 12
99 20 1 12 15
1 12 15 20 99
*/
#include <algorithm>
#include <vector>
using namespace std;
void print(int& i)
{
cout << i << '\t';
}
int main(int argc, char* argv[])
{
int a[] = { 12, 1, 20, 15, 30 };
vector<int> ivec(a, a + sizeof(a) / sizeof(a[0]));
for_each(ivec.begin(), ivec.end(), print);
cout << endl;
make_heap(ivec.begin(), ivec.end(), greater<int>()); // 建堆,会改变原始的vector中元素的顺序。greater<int>()指要建小顶堆
for_each(ivec.begin(), ivec.end(), print);
cout << endl;
pop_heap(ivec.begin(), ivec.end()); // 将root(即最小的那个元素)和vector中的最后一个元素交换,将除了最后一个元素之外的元素调整成堆
int& i = ivec.back(); // 取得最后的那个元素
cout << "root: " << i << endl;
ivec.pop_back(); // 移除最后的那个元素,即最小的那个元素
for_each(ivec.begin(), ivec.end(), print);
cout << endl;
ivec.push_back(99); // 往vector的尾部增加一个元素
push_heap(ivec.begin(), ivec.end()); // 将增加的元素加入小顶堆中(调整成堆)
for_each(ivec.begin(), ivec.end(), print);
cout << endl;
sort_heap(ivec.begin(), ivec.end()); // 堆排序,排序后就不再是堆了
for_each(ivec.begin(), ivec.end(), print);
cout << endl;
return 0;
}
// g++ heap.cpp -o heap -g -Wall
/*
greater:
12 1 20 15 30
1 12 20 15 30
30 12 20 15
99 30 20 15 12
12 15 20 30 99
*/
/*
less:
12 1 20 15 30
30 15 20 12 1
20 15 1 12
99 20 1 12 15
1 12 15 20 99
*/
2万+

被折叠的 条评论
为什么被折叠?



