Namespaces
Variants

std::ranges:: iter_swap

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
Definiert im Header <iterator>
namespace ranges {

inline namespace /* unspecified */ {
inline constexpr /* unspecified */
iter_swap = /* unspecified */ ;
}

}
(seit C++20)
(Anpassungspunktobjekt)
Aufrufsignatur
template < class I1, class I2 >
constexpr void iter_swap ( I1 && i1, I2 && i2 ) noexcept ( /* siehe unten */ ) ;
(seit C++20)
Hilfsfunktion
template < class X, class Y >

constexpr std:: iter_value_t < X >
iter - exchange - move ( X && x, Y && y )
noexcept ( noexcept ( std:: iter_value_t < X > ( std :: ranges:: iter_move ( x ) ) ) &&

noexcept ( * x = std :: ranges:: iter_move ( y ) ) ) ;
( Nur zur Darstellung* )

Tauscht die Werte, die durch zwei Iteratoren bezeichnet werden.

Die Wirkung der ausschließlich zur Darstellung dienenden Hilfsfunktion iter-exchange-move ist äquivalent zu

std::iter_value_t<X> old(std::ranges::iter_move(x));
*x = std::ranges::iter_move(y);
return old;

ranges :: iter_swap ( i1, i2 ) ist ausdrucksäquivalent zu:

  1. ( void ) iter_swap ( i1, i2 ) , falls i1 oder i2 einen Klassen- oder Aufzählungstyp hat und der Ausdruck wohlgeformt ist, wobei die Überladungsauflösung von iter_swap mit dem zusätzlichen Kandidaten void iter_swap ( auto , auto ) = delete ; [1] durchgeführt wird, wobei std::ranges::iter_swap selbst ausgeschlossen ist.
    • Wenn die gewählte Überladung nicht die durch i1 und i2 bezeichneten Werte austauscht, ist das Programm fehlerhaft, keine Diagnose erforderlich.
  2. Andernfalls, ranges:: swap ( * i1, * i2 ) , wenn sowohl I1 als auch I2 das Konzept indirectly_readable modellieren und wenn std:: iter_reference_t < I1 > und std:: iter_reference_t < I2 > das Konzept swappable_with modellieren.
  3. Andernfalls, ( void ) ( * i1 = iter-exchange-move ( i2, i1 ) ) , wenn std:: indirectly_movable_storable < I1, I2 > und std:: indirectly_movable_storable < I2, I1 > beide modelliert werden, außer dass i1 nur einmal ausgewertet wird.
  4. Andernfalls ist ranges :: iter_swap ( i1, i2 ) fehlerhaft, was zu einem Substitutionsfehler führen kann, wenn ranges :: iter_swap ( i1, i2 ) im unmittelbaren Kontext einer Template-Instanziierung erscheint.
  1. Dies verhindert den Aufruf der unconstrained std::iter_swap .

Customization Point Objects

Der Name ranges::iter_swap bezeichnet ein Customization Point Object , welches ein konstantes Funktionsobjekt eines literalen semiregular Klassentyps ist. Weitere Details finden Sie unter CustomizationPointObject .

Beispiel

Siehe auch

(C++20)
vertauscht die Objekte, auf die zwei angepasste zugrunde liegende Iteratoren zeigen
(Funktions-Template)
(C++20)
vertauscht die Objekte, auf die zwei zugrunde liegende Iteratoren zeigen
(Funktions-Template)
vertauscht die Elemente, auf die zwei Iteratoren zeigen
(Funktions-Template)