C++ STL algorithm, pop_heap() code example
Compiler: Visual C++ Express Edition 2005
Compiled on Platform: Windows XP Pro SP2
Header file: Standard
Additional project setting: Set project to be compiled as C++
Project -> your_project_name Properties -> Configuration Properties -> C/C++ -> Advanced -> Compiled As: Compiled as C++ Code (/TP)
Other info: none
To do: Using the C++ pop_heap() to remove the largest element from the front of a heap to the next-to-last position in the range and then forms a new heap from the remaining elements in C++ programming
To show: How to use the C++ algorithm, pop_heap() to remove the largest element from the front of a heap to the next-to-last position in the range and then forms a new heap from the remaining elements in C++ programming
// C++ STL algorithm, pop_heap()
#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>
using namespace std;
int main(void)
{
// container
vector <int> vec;
// iterator
vector <int>::iterator Iter1;
int i;
// push data in range
for(i = 1; i <= 9; i++)
vec.push_back(i);
// make vec vector a heap with default less-than ordering
cout<<"Operation: random_shuffle(vec.begin(), vec.end())"<<endl;
random_shuffle(vec.begin(), vec.end());
make_heap(vec.begin(), vec.end());
cout<<"The heaped version of vec vector data is: ";
for(Iter1 = vec.begin(); Iter1 != vec.end(); Iter1++)
cout<<*Iter1<<" ";
cout<<endl;
// add an element to the back of the heap
vec.push_back(11);
push_heap(vec.begin(), vec.end());
cout<<"The re-heaped vec vector data with 11 added: ";
for(Iter1 = vec.begin(); Iter1 != vec.end(); Iter1++)
cout<<*Iter1<<" ";
cout<<endl;
// remove the largest element from the heap
cout<<"\nOperation: pop_heap(vec.begin(), vec.end())"<<endl;
pop_heap(vec.begin(), vec.end());
cout<<"The heap vec vector data with 11 removed is: ";
for(Iter1 = vec.begin(); Iter1 != vec.end(); Iter1++)
cout<<*Iter1<<" ";
cout<<endl;
// make vec a heap with greater-than ordering with a 0 element
cout<<"\nOperation: make_heap(vec.begin(), vec.end(), greater<int>())"<<endl;
make_heap(vec.begin(), vec.end(), greater<int>());
vec.push_back(0);
push_heap(vec.begin(), vec.end(), greater<int>());
cout<<"The greater than re-heaped vec vector data puts the smallest element first:";
for(Iter1 = vec.begin(); Iter1 != vec.end(); Iter1++)
cout<<*Iter1<<" ";
cout<<endl;
// application of pop_heap() to remove the smallest element
cout<<"\nOperation: pop_heap(vec.begin(), vec.end(), greater<int>())"<<endl;
pop_heap(vec.begin(), vec.end(), greater<int>());
cout<<"The greater than heaped vec vector data with the smallest element removed from the heap is: ";
for(Iter1 = vec.begin(); Iter1 != vec.end(); Iter1++)
cout<<*Iter1<<" ";
cout<<endl;
return 0;
}
Output examples:
Operation: random_shuffle(vec.begin(), vec.end())
The heaped version of vec vector data is: 9 5 8 4 1 6 7 2 3
The re-heaped vec vector data with 11 added: 11 9 8 4 5 6 7 2 3 1
Operation: pop_heap(vec.begin(), vec.end())
The heap vec vector data with 11 removed is: 9 5 8 4 1 6 7 2 3 11
Operation: make_heap(vec.begin(), vec.end(), greater<int>())
The greater than re-heaped vec vector data puts the smallest element first:0 1 6 3 2 8 7 4 9 11 5
Operation: pop_heap(vec.begin(), vec.end(), greater<int>())
The greater than heaped vec vector data with the smallest element removed from the heap is: 1 2 6 3 5 8 7 4 9 11 0
Press any key to continue . . .