Namespaces
Variants

node-handle

From cppreference.net
template < /* unspecified */ >
class /*node-handle*/ ;
(seit C++17)
( Nur zur Darstellung* )

Ein node handle ist ein Objekt, das die Eigentümerschaft eines einzelnen Elements aus einem assoziativen Container und einem ungeordneten assoziativen Container übernimmt. Es kann verwendet werden, um diese Eigentümerschaft an einen anderen Container mit kompatiblen Nodes zu übertragen.

Ein Node-Handle hat zwei mögliche Zustände:

  • Es bezieht sich auf ein Element, das aus einem Container extrahiert wurde, oder
  • es ist empty  .

Wenn ein Node-Handle nicht leer ist, enthält es einen Allokator, der dem Allokator des zuvor extrahierten Containers entspricht.

Für alle Map-Container ( std::map , std::multimap , std::unordered_map und std::unordered_multimap ), deren key_type Key und mapped_type T ist, ist das Verhalten von Operationen mit Node Handles undefiniert, falls eine benutzerdefinierte Spezialisierung von std::pair für std:: pair < Key, T > oder std:: pair < const Key, T > existiert.

Inhaltsverzeichnis

Verschachtelte Typen

Typ Definition
key_type (nur Map-Container) der im Knoten gespeicherte Schlüssel
mapped_type (nur Map-Container) der gemappte Teil des im Knoten gespeicherten Elements
value_type (nur Set-Container) das im Knoten gespeicherte Element
allocator_type der beim Zerstören des Elements zu verwendende Allokator
container_node_type nicht spezifiziert
( Nur zur Darstellung verwendeter Member-Typ* )
ator_traits std:: allocator_traits < allocator_type >
( Nur zur Darstellung verwendeter Member-Typ* )

Siehe AssociativeContainer und UnorderedAssociativeContainer für die tatsächlichen Definitionen der nicht nur darstellungsinternen geschachtelten Typen.

Datenmitglieder

Mitglied Beschreibung

typename ator_traits  :: template
rebind_traits < container_node_type  > :: pointer

ptr_
ein Zeiger auf einen Container-Knoten, der das referenzierte Objekt enthält [1]
( Nur zur Veranschaulichung verwendetes Mitgliedsobjekt* )
std:: optional < allocator_type > alloc_ der gespeicherte Allokator
( Nur zur Veranschaulichung verwendetes Mitgliedsobjekt* )
  1. Die Eigentümerschaft des referenzierten Container-Knotens wurde bereits während der Extraktion des Elements vom Quellcontainer getrennt. Selbst wenn die Lebensdauer des Quellcontainers beendet ist, sind der Container-Knoten und das enthaltene Element weiterhin zugänglich.

Memberfunktionen

node-handle  :: node-handle

constexpr /*node-handle*/ ( ) noexcept ;
(1)
/*node-handle*/ ( /*node-handle*/ && other ) noexcept ;
(2) (constexpr since C++26)
1) Der Standardkonstruktor initialisiert den Node-Handle auf den leeren Zustand.
2) Der Move-Konstruktor übernimmt den Besitz des Containerelements von other .
  • ptr_ wird mit other. ptr_ initialisiert.
  • alloc_ wird mit other. alloc_ move-konstruiert.
  • Weist nullptr an other. ptr_ zu.
  • Weist std:: nullopt an other. ptr_ zu.

Parameter

other - ein anderer Node-Handle

Anmerkungen

Es gibt keinen benutzerdefinierten Kopierdestruktor. node-handle ist nicht CopyConstructible .

Neben Move-Konstruktion und Move-Zuweisung kann ein nicht-leerer node-handle nur durch Aufruf der extract Memberfunktionen von (ungeordneten) assoziativen Containern erstellt werden.

node-handle  :: operator=

/*node-handle*/ & operator = ( /*node-handle*/ && other ) ;
(constexpr seit C++26)

Der Move-Zuweisungsoperator ersetzt den Zustand von * this durch den Zustand von other unter Verwendung von Move-Semantik.

  1. Falls ptr_ ! = nullptr true ist, zerstört das durch * this referenzierte Element durch Aufruf von ator_traits  :: destroy und gibt anschließend den Speicher für das referenzierte Element durch Aufruf von ator_traits  :: rebind_traits < container-node-type  > :: deallocate frei.
  2. Weist other. ptr_ an ptr_  zu.
  3. Falls ator_traits  :: propagate_on_container_move_assignment true ist, weist other. alloc_ per Move alloc_  zu.
  4. Weist nullptr an other. ptr_ und std:: nullopt an other. alloc_ zu.

Falls alle folgenden Werte false sind, ist das Verhalten undefiniert:

  • ator_traits  :: propagate_on_container_move_assignment
  • ! alloc_
  • alloc_ == other. alloc_

Parameter

other - ein weiterer Node-Handle

Rückgabewert

* this

Exceptions

Wirft nichts.

Anmerkungen

Es gibt keinen benutzerdefinierten Kopierzuweisungsoperator. node-handle ist nicht CopyAssignable .

node-handle  :: ~ node-handle

~ /*node-handle*/ ( ) ;
(constexpr seit C++26)

Wenn ptr_ ! = nullptr true ist, zerstört das Element, auf das durch * this verwiesen wird, durch Aufruf von ator_traits  :: destroy und gibt dann das Containerelement durch Aufruf von ator_traits  :: rebind_traits < container-node-type  > :: deallocate frei.

Andernfalls tut es nichts.

node-handle  :: empty

bool empty ( ) const noexcept ;
(constexpr since C++26)

Gibt true zurück, wenn der Node-Handle leer ist, false andernfalls.

Rückgabewert

ptr_ == nullptr

node-handle  :: operator bool

explicit operator bool ( ) const noexcept ;
(constexpr seit C++26)

Konvertiert zu false wenn der Node-Handle leer ist, true andernfalls.

Rückgabewert

ptr_ ! = nullptr

node-handle  :: get_allocator

allocator_type get_allocator ( ) const ;
(constexpr seit C++26)

Gibt eine Kopie des gespeicherten Allokators zurück.

Wenn empty ( ) true ist, ist das Verhalten undefiniert.

Rückgabewert

* alloc_

Ausnahmen

Wirft nichts.

node-handle  :: value (nur Set-Container)

value_type & value ( ) const ;
(constexpr seit C++26)

Gibt eine Referenz auf das Element zurück, auf das * this verweist.

Wenn empty ( ) true ist, ist das Verhalten undefiniert.

Rückgabewert

Wie oben beschrieben.

Ausnahmen

Wirft nichts.

node-handle  :: key (nur Map-Container)

key_type & key ( ) const ;
(constexpr seit C++26)

Gibt eine nicht-konstante Referenz auf das key_type -Mitglied des Elements zurück, auf das durch * this verwiesen wird.

Wenn empty ( ) true ist, ist das Verhalten undefiniert.

Rückgabewert

Wie oben beschrieben.

Ausnahmen

Wirft nichts.

Anmerkungen

Diese Funktion ermöglicht es, den Schlüssel eines aus einer Map extrahierten Knotens zu modifizieren und ihn dann wieder in die Map einzufügen, ohne das Element jemals zu kopieren oder zu verschieben.

node-handle  :: mapped (nur Map-Container)

mapped_type & mapped ( ) const ;
(constexpr seit C++26)

Gibt eine Referenz auf den mapped_type -Member des Elements zurück, auf das durch * this verwiesen wird.

Wenn empty ( ) true ist, ist das Verhalten undefiniert.

Rückgabewert

Wie oben beschrieben.

Exceptions

Wirft nichts.

node-handle  :: swap

void swap ( /*node-handle*/ & other ) noexcept ( /* see below */ ) ;
(constexpr seit C++26)

Ruft swap ( ptr_  , nh. ptr_  ) auf. Falls einer der folgenden Werte true ist, wird ebenfalls swap ( alloc_  , nh. alloc_  ) aufgerufen:

  • ator_traits  :: propagate_on_container_swap
  • ! alloc_
  • ! other. alloc_

Falls alle folgenden Werte false sind, ist das Verhalten undefiniert:

  • ator_traits  :: propagate_on_container_swap
  • ! alloc_
  • ! other. alloc_
  • alloc_ == other. alloc_

Ausnahmen

noexcept Spezifikation:
noexcept ( ator_traits :: propagate_on_container_swap :: value ||
ator_traits :: is_always_equal :: value )

Nicht-Member-Funktionen

std::swap ( node-handle  )

friend void swap ( /*node-handle*/ & lhs, /*node-handle*/ & rhs )
noexcept ( noexcept ( lhs. swap ( rhs ) ) ) ;
(constexpr seit C++26)

Führt effektiv x. swap ( y ) aus.

Diese Funktion ist für gewöhnliche unqualified oder qualified lookup nicht sichtbar und kann nur durch argument-dependent lookup gefunden werden, wenn node-handle eine assoziierte Klasse der Argumente ist.