(原创)sort_heap后使用push_heap ,pop_heap异常
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;
void print(int elem)
{
cout<<elem<<" ";
}
int main()
{
vector<int> Arry;
Arry.push_back(5);
Arry.push_back(6);
Arry.push_back(4);
Arry.push_back(8);
Arry.push_back(2);
Arry.push_back(3);
for_each(Arry.begin(),Arry.end(),print);
cout<<endl;
make_heap(Arry.begin(),Arry.end());
cout<<"make_heap:";
for_each(Arry.begin(),Arry.end(),print);
sort_heap(Arry.begin(),Arry.end());
cout<<endl<<"sort_heap after:";
for_each(Arry.begin(),Arry.end(),print);
Arry.push_back(33);
push_heap(Arry.begin(),Arry.end());
cout<<endl<<"push_heap after:";
for_each(Arry.begin(),Arry.end(),print);
//cout<<endl;
// for_each(Arry.begin(),Arry.end(),print);
// pop_heap(Arry.begin(),Arry.end());
// Arry.pop_back();
// for_each(Arry.begin(),Arry.end(),print);
return 0;
}
报错:expression:invalid heap
主要原因是:sort_heap执行以后原有数据已经再是是heap了。而push_heap和pop_heap使用之前必须保证原有数据仍是heap。
解决办法:
本人想到的比较笨的方法在执行sort_heap以后如果还要使用push_heap或pop_heap更改数据时,首先执行make_heap,是原有数据重新生成为heap。