std::pop_heap

Header: <algorithm>

Swaps the value in the position first and the value in the position last - 1 and makes the subrange [first,last - 1) into a heap. This has the effect of removing the first element from the heap [first,last).

# Declarations

template< class RandomIt >
void pop_heap( RandomIt first, RandomIt last );

(constexpr since C++20)

template< class RandomIt, class Compare >
void pop_heap( RandomIt first, RandomIt last, Compare comp );

(constexpr since C++20)

# Parameters

# Example

#include <algorithm>
#include <iostream>
#include <string_view>
#include <type_traits>
#include <vector>
 
void println(std::string_view rem, const auto& v)
{
    std::cout << rem;
    if constexpr (std::is_scalar_v<std::decay_t<decltype(v)>>)
        std::cout << v;
    else
        for (int e : v)
            std::cout << e << ' ';
    std::cout << '\n';
}
 
int main()
{
    std::vector<int> v{3, 1, 4, 1, 5, 9};
 
    std::make_heap(v.begin(), v.end());
    println("after make_heap: ", v);
 
    std::pop_heap(v.begin(), v.end()); // moves the largest to the end
    println("after pop_heap:  ", v);
 
    int largest = v.back();
    println("largest element: ", largest);
 
    v.pop_back(); // actually removes the largest element
    println("after pop_back:  ", v);
}

# Defect reports

DRApplied toBehavior as publishedCorrect behavior
LWG 1205C++98the behavior was unclear if [first, last) is emptythe behavior is undefined in this case

# See also