sort_heap后使用push_heap ,pop_heap异常
2012-11-13 20:20
453 查看
(原创)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。
#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。
相关文章推荐
- stl push_heap,make_heap,pop_heap,sort_heap的使用
- C++中堆的应用:make_heap, pop_heap, push_heap, sort_heap, priority_queue
- C++中堆的应用:make_heap, pop_heap, push_heap, sort_heap
- STL---heap概述,make_heap,sort_heap,pop_heap,push_heap。
- STL---heap概述,make_heap,sort_heap,pop_heap,push_heap
- C++ make_heap,push_heap,pop_heap,sort_heap(以最大的K个数为例)
- vs2005 c++ heap使用push_head()异常invalid heap(bug)
- STL---heap概述,make_heap,sort_heap,pop_heap,push_heap。
- STL---heap概述,make_heap,sort_heap,pop_heap,push_heap
- C++中堆(优先队列)的应用:make_heap, pop_heap, push_heap, sort_heap, priority_queue
- make_heap, push_heap, pop_heap, 的使用
- make_heap();、pop_heap();、push_heap();、sort_heap();
- STL make_heap push_heap pop_heap sort_heap
- STL--heap概述:make_heap,sort_heap,pop_heap,push_heap
- 【STL】Heap算法——push_heap、pop_heap、sort_heap、make_heap
- 堆算法(make_heap,push_heap,pop_heap, sort_heap)
- 堆算法(make_heap,push_heap,pop_heap, sort_heap)
- STL---heap概述,make_heap,sort_heap,pop_heap,push_heap
- c++: c++ make_heap, pop_heap, push_heap, sort_heap详解
- 使用CATransaction实现push pop控制器结束的回调