std:: is_heap_until
|
Definiert im Header
<algorithm>
|
||
|
template
<
class
RandomIt
>
RandomIt is_heap_until ( RandomIt first, RandomIt last ) ; |
(1) |
(seit C++11)
(constexpr seit C++20) |
|
template
<
class
ExecutionPolicy,
class
RandomIt
>
RandomIt is_heap_until
(
ExecutionPolicy
&&
policy,
|
(2) | (seit C++17) |
|
template
<
class
RandomIt,
class
Compare
>
RandomIt is_heap_until ( RandomIt first, RandomIt last, Compare comp ) ; |
(3) |
(seit C++11)
(constexpr seit C++20) |
|
template
<
class
ExecutionPolicy,
class
RandomIt,
class
Compare
>
RandomIt is_heap_until
(
ExecutionPolicy
&&
policy,
|
(4) | (seit C++17) |
Untersucht den Bereich
[
first
,
last
)
und findet den größten Bereich, beginnend bei
first
, der einen
Heap
darstellt.
|
std:: is_execution_policy_v < std:: decay_t < ExecutionPolicy >> ist true . |
(bis C++20) |
|
std:: is_execution_policy_v < std:: remove_cvref_t < ExecutionPolicy >> ist true . |
(seit C++20) |
Inhaltsverzeichnis |
Parameter
| first, last | - | das Paar von Iteratoren, das den Bereich der zu untersuchenden Elemente definiert |
| policy | - | die zu verwendende Ausführungsrichtlinie |
| comp | - |
Vergleichsfunktionsobjekt (d.h. ein Objekt, das die Anforderungen von
Compare
erfüllt), das
true
zurückgibt, wenn das erste Argument
kleiner
als das zweite ist.
Die Signatur der Vergleichsfunktion sollte äquivalent zu Folgendem sein: bool cmp ( const Type1 & a, const Type2 & b ) ;
Obwohl die Signatur keine
const
&
benötigt, darf die Funktion die übergebenen Objekte nicht modifizieren und muss alle Werte des Typs (möglicherweise const)
|
| Typanforderungen | ||
-
RandomIt
muss die Anforderungen von
LegacyRandomAccessIterator
erfüllen.
|
||
-
Compare
muss die Anforderungen von
Compare
erfüllen.
|
||
Rückgabewert
Der letzte Iterator
it
für den der Bereich
[
first
,
it
)
einen Heap bildet.
Komplexität
Gegeben N als std:: distance ( first, last ) :
Ausnahmen
Die Überladungen mit einem Template-Parameter namens
ExecutionPolicy
melden Fehler wie folgt:
-
Wenn die Ausführung einer als Teil des Algorithmus aufgerufenen Funktion eine Exception wirft und
ExecutionPolicyeiner der Standard-Policies ist, wird std::terminate aufgerufen. Für jede andereExecutionPolicyist das Verhalten implementierungsdefiniert. - Wenn der Algorithmus keinen Speicher allokieren kann, wird std::bad_alloc geworfen.
Beispiel
#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()); // wahrscheinlich zerstört den 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'; }
Ausgabe:
all of v: 9 5 4 1 1 3 2 6 only heap: 9 5 4 1 1 3 2
Siehe auch
|
(C++11)
|
prüft, ob der gegebene Bereich ein Max-Heap ist
(Funktions-Template) |
|
erstellt einen Max-Heap aus einer Reihe von Elementen
(Funktions-Template) |
|
|
fügt ein Element zu einem Max-Heap hinzu
(Funktions-Template) |
|
|
entfernt das größte Element aus einem Max-Heap
(Funktions-Template) |
|
|
wandelt einen Max-Heap in eine aufsteigend sortierte Elementreihe um
(Funktions-Template) |
|
|
(C++20)
|
findet den größten Teilbereich, der ein Max-Heap ist
(Algorithmus-Funktionsobjekt) |