std:: is_heap_until
| 
           Defined in header
            
            
             <algorithm>
            
            | ||
| 
           
            
             template
            
            
             <
            
            
             class
            
            RandomIt
            
             >
            
             RandomIt is_heap_until ( RandomIt first, RandomIt last ) ; | (1) | (since C++11) (constexpr since C++20) | 
| 
           
            
             template
            
            
             <
            
            
             class
            
            ExecutionPolicy,
            
             class
            
            RandomIt
            
             >
            
             
             RandomIt is_heap_until
             
              (
             
             ExecutionPolicy
             
              &&
             
             policy,
              | (2) | (since C++17) | 
| 
           
            
             template
            
            
             <
            
            
             class
            
            RandomIt,
            
             class
            
            Compare
            
             >
            
             RandomIt is_heap_until ( RandomIt first, RandomIt last, Compare comp ) ; | (3) | (since C++11) (constexpr since C++20) | 
| 
           
            
             template
            
            
             <
            
            
             class
            
            ExecutionPolicy,
            
             class
            
            RandomIt,
            
             class
            
            Compare
            
             >
            
             
             RandomIt is_heap_until
             
              (
             
             ExecutionPolicy
             
              &&
             
             policy,
              | (4) | (since C++17) | 
       Examines the range
       
        
         [
        
        
         
          first
         
        
        
         ,
        
        
         
          last
         
        
        
         )
        
       
       and finds the largest range beginning at
       
        
         first
        
       
       which is a
       
        heap
       
       .
      
| std:: is_execution_policy_v < std:: decay_t < ExecutionPolicy >> is true . | (until C++20) | 
| std:: is_execution_policy_v < std:: remove_cvref_t < ExecutionPolicy >> is true . | (since C++20) | 
Parameters
| first, last | - | the range of elements to examine | 
| policy | - | the execution policy to use. See execution policy for details. | 
| comp | - | comparison function object (i.e. an object that satisfies the requirements of
         
          
           Compare
          
         
         ) which returns
         
          
           
            true
           
          
         
         if the first argument is
         
          less
         
         than the second. The signature of the comparison function should be equivalent to the following: bool cmp ( const Type1 & a, const Type2 & b ) ; 
          While the signature does not need to have
          
           
            
             const
            
            
             &
            
           
          
          , the function must not modify the objects passed to it and must be able to accept all values of type (possibly const)
           | 
| Type requirements | ||
| - 
          RandomIt
         must meet the requirements of
         
          
           LegacyRandomAccessIterator
          
         
         . | ||
| - 
          Compare
         must meet the requirements of
         
          
           Compare
          
         
         . | ||
Return value
       The last iterator
       
        
         it
        
       
       for which range
       
        
         [
        
        
         
          first
         
        
        
         ,
        
        
         
          it
         
        
        
         )
        
       
       is a heap.
      
Complexity
Given N as std:: distance ( first, last ) :
Exceptions
       The overloads with a template parameter named
       
        ExecutionPolicy
       
       report errors as follows:
      
- 
        If execution of a function invoked as part of the algorithm throws an exception and
        ExecutionPolicyis one of the standard policies , std::terminate is called. For any otherExecutionPolicy, the behavior is implementation-defined.
- If the algorithm fails to allocate memory, std::bad_alloc is thrown.
Example
#include <algorithm> #include <iostream> #include <vector> int main() { std::vector<int> v{3, 1, 4, 1, 5, 9}; std::make_heap(v.begin(), v.end()); // probably mess up the heap v.push_back(2); v.push_back(6); auto heap_end = std::is_heap_until(v.begin(), v.end()); std::cout << "all of v: "; for (const auto& i : v) std::cout << i << ' '; std::cout << '\n'; std::cout << "only heap: "; for (auto i = v.begin(); i != heap_end; ++i) std::cout << *i << ' '; std::cout << '\n'; }
Output:
all of v: 9 5 4 1 1 3 2 6 only heap: 9 5 4 1 1 3 2
See also
| 
           
            
             
              (C++11)
             
            
           
           | checks if the given range is a max heap (function template) | 
| creates a max heap out of a range of elements (function template) | |
| adds an element to a max heap (function template) | |
| removes the largest element from a max heap (function template) | |
| turns a max heap into a range of elements sorted in ascending order (function template) | |
| 
           
            
             
              (C++20)
             
            
           
           | finds the largest subrange that is a max heap (algorithm function object) |