std:: is_heap
|
Definiert im Header
<algorithm>
|
||
|
template
<
class
RandomIt
>
bool is_heap ( RandomIt first, RandomIt last ) ; |
(1) |
(seit C++11)
(constexpr seit C++20) |
|
template
<
class
ExecutionPolicy,
class
RandomIt
>
bool
is_heap
(
ExecutionPolicy
&&
policy,
|
(2) | (seit C++17) |
|
template
<
class
RandomIt,
class
Compare
>
bool is_heap ( RandomIt first, RandomIt last, Compare comp ) ; |
(3) |
(seit C++11)
(constexpr seit C++20) |
|
template
<
class
ExecutionPolicy,
class
RandomIt,
class
Compare
>
bool
is_heap
(
ExecutionPolicy
&&
policy,
|
(4) | (seit C++17) |
Überprüft, ob
[
first
,
last
)
ein
Heap
ist.
|
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 prüfenden 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 der Typen (möglicherweise const)
|
| Typanforderungen | ||
-
RandomIt
muss die Anforderungen von
LegacyRandomAccessIterator
erfüllen.
|
||
-
Compare
muss die Anforderungen von
Compare
erfüllen.
|
||
Rückgabewert
true wenn der Bereich ein Heap bezüglich des entsprechenden Vergleichsoperators ist, false andernfalls.
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 allozieren kann, wird std::bad_alloc geworfen.
Beispiel
#include <algorithm> #include <bit> #include <iostream> #include <vector> int main() { std::vector<int> v{3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9}; std::cout << "initially, v:\n"; for (const auto& i : v) std::cout << i << ' '; std::cout << '\n'; if (!std::is_heap(v.begin(), v.end())) { std::cout << "making heap...\n"; std::make_heap(v.begin(), v.end()); } std::cout << "after make_heap, v:\n"; for (auto t{1U}; const auto& i : v) std::cout << i << (std::has_single_bit(++t) ? " | " : " "); std::cout << '\n'; }
Ausgabe:
initially, v: 3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 making heap... after make_heap, v: 9 | 6 9 | 5 5 9 7 | 1 1 3 5 8 3 4 2 |
Siehe auch
|
(C++11)
|
findet den größten Teilbereich, der einen Max-Heap darstellt
(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)
|
prüft, ob der gegebene Bereich einen Max-Heap darstellt
(Algorithmus-Funktionsobjekt) |