node-handle
|
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.
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
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* ) |
- ↑ 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) |
-
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.
-
Falls
ptr_! = nullptr true ist, zerstört das durch * this referenzierte Element durch Aufruf vonator_traits :: destroy und gibt anschließend den Speicher für das referenzierte Element durch Aufruf vonator_traits :: rebind_traits <container-node-type > :: deallocate frei. -
Weist
other.
ptr_anptr_ zu. -
Falls
ator_traits :: propagate_on_container_move_assignment true ist, weist other.alloc_per Movealloc_ zu. -
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
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.