Namespaces
Variants

std::hive

Von de.cppreference.net
 
 
 
 
Definiert in Header <hive>
template<
    class T,
    class Allocator = std::allocator<T>
> class hive;
(1) (seit C++26)
namespace pmr {
    template<class T>
    using hive = std::hive<T, std::pmr::polymorphic_allocator<T>>;
}
(2) (seit C++26)


1) std::hive ist ein sequenzieller Container, der Einfüge- und Löschoperationen in konstanter Zeit bereitstellt.
2) std::pmr::hive ist ein Alias-Template, das einen polymorphen Allokator verwendet.

Der Hive verwaltet seinen Speicher automatisch in mehreren Speicherblöcken (Elementblöcken). Die Einfügeposition ist nicht festgelegt, sodass der Container die Speicherpositionen gelöschter Elemente wiederverwenden kann.

Wenn aktive Blöcke (Elementblöcke, die Elemente enthalten) leer werden, können sie entweder freigegeben oder zu reservierten Blöcken werden.

Reservierte Blöcke werden zu aktiven Blöcken, wenn sie wiederverwendet werden, um Elemente zu speichern. Ein Benutzer kann durch Aufruf von reserve() zusätzliche reservierte Blöcke erstellen.

Löschen und Iteration haben beide konstante Zeitkomplexität.

Die Kapazität jedes aktiven Blocks wächst um einen implementierungsdefinierten Faktor (z. B. um 1.69). Sowohl Benutzer als auch Implementierungen können die minimale und maximale Elementkapazität von Elementblöcken begrenzen.

Ein std::hive erfüllt die Anforderungen von Container, mit Ausnahme der Operatoren == und !=. Ein std::hive erfüllt auch die Anforderungen von ReversibleContainer, von AllocatorAwareContainer und einige der Anforderungen von SequenceContainer.

Template-Parameter

T – Der Typ der Elemente.
Die Anforderungen, die an die Elemente gestellt werden, hängen von den tatsächlich auf dem Container ausgeführten Operationen ab. Im Allgemeinen wird gefordert, dass der Elementtyp ein vollständiger Typ ist und die Anforderungen von Erasable erfüllt, aber viele Mitgliedsfunktionen stellen strengere Anforderungen.

Allocator – Ein Allokator, der zum Belegen/Freigeben von Speicher und zum Konstruieren/Zerstören der Elemente in diesem Speicher verwendet wird. Der Typ muss die Anforderungen von Allocator erfüllen. Das Programm ist fehlerhaft, wenn Allocator::value_type nicht dasselbe wie T ist.

Mitgliedstypen

Mitgliedstyp Definition
value_type T
allocator_type Allocator
pointer std::allocator_traits<Allocator>::pointer
const_pointer std::allocator_traits<Allocator>::const_pointer
reference value_type&
const_reference const value_type&
size_type implementierungsdefiniert
difference_type implementierungsdefiniert
iterator implementierungsdefiniert LegacyBidirectionalIterator zu value_type
const_iterator implementierungsdefiniert LegacyBidirectionalIterator zu const value_type
reverse_iterator std::reverse_iterator<iterator>
const_reverse_iterator std::reverse_iterator<const_iterator>

Datenelemente

Mitglied Beschreibung
hive_limits current-limits (privat) aktuelle Blockkapazitätsgrenzen
(zur Erläuterung offengelegtes Mitgliedsobjekt*)

Mitgliedsfunktionen

erstellt das hive
(öffentliche Mitgliedsfunktion)
zerstört das hive
(öffentliche Mitgliedsfunktion)
weist dem Container Werte zu
(öffentliche Mitgliedsfunktion)
weist dem Container Werte zu
(öffentliche Mitgliedsfunktion)
weist dem Container einen Wertebereich zu
(öffentliche Mitgliedsfunktion)
gibt den zugehörigen Allokator zurück
(öffentliche Mitgliedsfunktion)
Iteratoren
gibt einen Iterator auf den Anfang zurück
(öffentliche Mitgliedsfunktion)
gibt einen Iterator auf das Ende zurück
(öffentliche Mitgliedsfunktion)
gibt einen Reverse-Iterator auf den Anfang zurück
(öffentliche Mitgliedsfunktion)
gibt einen Reverse-Iterator auf das Ende zurück
(öffentliche Mitgliedsfunktion)
Kapazität
prüft, ob der Container leer ist
(öffentliche Mitgliedsfunktion)
gibt die Anzahl der Elemente zurück
(öffentliche Mitgliedsfunktion)
gibt die maximal mögliche Anzahl von Elementen zurück
(öffentliche Mitgliedsfunktion)
gibt die Anzahl der Elemente zurück, die im aktuell belegten Speicher gehalten werden können
(öffentliche Mitgliedsfunktion)
reserviert Speicher
(öffentliche Mitgliedsfunktion)
reduziert die Speichernutzung durch Freigabe ungenutzten Speichers
(öffentliche Mitgliedsfunktion)
gibt reservierte Blöcke frei und reduziert die Kapazität entsprechend
(öffentliche Mitgliedsfunktion)
gibt die aktuellen Blockkapazitätsgrenzen zurück
(öffentliche Mitgliedsfunktion)
gibt die Standard-Blockkapazitätsgrenzen zurück
(öffentliche Mitgliedsfunktion)
gibt die harten Blockkapazitätsgrenzen zurück
(öffentliche Mitgliedsfunktion)
prüft, ob die angegebenen Kapazitätsgrenzen eingehalten werden
(öffentliche Mitgliedsfunktion)
allokiert aktive Blöcke neu, sodass sie innerhalb der Blockgrenzen liegen
(öffentliche Mitgliedsfunktion)
Modifikatoren
erzeugt ein Element direkt an Ort und Stelle
(öffentliche Mitgliedsfunktion)
erzeugt Elemente direkt an Ort und Stelle unter Verwendung eines Hinweises
(öffentliche Mitgliedsfunktion)
fügt Elemente ein
(öffentliche Mitgliedsfunktion)
fügt einen Bereich von Elementen ein
(öffentliche Mitgliedsfunktion)
löscht Elemente
(öffentliche Mitgliedsfunktion)
tauscht den Inhalt aus
(öffentliche Mitgliedsfunktion)
leert den Inhalt
(öffentliche Mitgliedsfunktion)
Operationen
verschiebt Elemente aus einem anderen hive
(öffentliche Mitgliedsfunktion)
entfernt aufeinanderfolgende doppelte Elemente
(öffentliche Mitgliedsfunktion)
sortiert die Elemente
(öffentliche Mitgliedsfunktion)
gibt einen Iterator zurück, der auf dasselbe Element wie der angegebene Zeiger zeigt
(öffentliche Mitgliedsfunktion)

Nicht-Mitgliedsfunktionen

spezialisiert den std::swap-Algorithmus
(Funktionstemplate)
löscht alle Elemente, die bestimmte Kriterien erfüllen
(Funktionstemplate)

Ableitungsregeln

(seit C++26)

Hilfsklassen

Layout-Informationen über Blockkapazitätsgrenzen in std::hive
(Klasse)

Anmerkungen

Feature-Test-Makro Wert Std Funktion
__cpp_lib_hive 202502L (C++26) std::hive

Beispiel

Siehe auch

doppelt verkettete Liste
(Klassentemplate)
einfach verkettete Liste
(Klassentemplate)

Externe Links

1.  plf::hive — Eine Referenzimplementierung auf github.com
2.  Bienenstock auf Wikipedia.org