http://www.cplusplus.com/reference/algorithm/push_heap/
push_heap
// range heap example
#include <iostream> // std::cout
#include <algorithm> // std::make_heap, std::pop_heap, std::push_heap, std::sort_heap
#include <vector> // std::vector
int main () {
int myints[] = {10,20,30,5,15};
std::vector<int> v(myints,myints+5);
std::make_heap (v.begin(),v.end());
std::cout << "initial max heap : " << v.front() << '\n';
std::pop_heap (v.begin(),v.end()); v.pop_back();
std::cout << "max heap after pop : " << v.front() << '\n';
v.push_back(99); std::push_heap (v.begin(),v.end());
std::cout << "max heap after push: " << v.front() << '\n';
std::sort_heap (v.begin(),v.end());
std::cout << "final sorted range :";
for (unsigned i=0; i<v.size(); i++)
std::cout << ' ' << v[i];
std::cout << '\n';
return 0;
}
push_heap时,默认vec.begin()~vec.end()-2之间已经成堆。push_heap将vec.end()-1插入堆中。
VS出错
使用VS debug时,有时会报invalid heap错误,但倒数第二个及之前的元素已经成堆。
选用release时,则不会出错。
难道release会给之间插入一个make_heap的操作?