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)
Défini dans l'en-tête <iterator>
namespace ranges {

inline namespace /* non spécifié */ {
inline constexpr /* non spécifié */
iter_swap = /* non spécifié */ ;
}

}
(depuis C++20)
(objet de point de personnalisation)
Signature d'appel
template < class I1, class I2 >
constexpr void iter_swap ( I1 && i1, I2 && i2 ) noexcept ( /* voir ci-dessous */ ) ;
(depuis C++20)
Fonction utilitaire
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 ) ) ) ;
( exposition uniquement* )

Échange les valeurs désignées par deux itérateurs.

L'effet de la fonction d'assistance d'exposition uniquement iter-exchange-move est équivalent à

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

ranges :: iter_swap ( i1, i2 ) est expression-équivalent à :

  1. ( void ) iter_swap ( i1, i2 ) , si i1 ou i2 a un type classe ou énumération et que l'expression est bien formée, où la résolution de surcharge de iter_swap est effectuée avec le candidat supplémentaire void iter_swap ( auto , auto ) = delete ; [1] , excluant std::ranges::iter_swap lui-même.
    • Si la surcharge sélectionnée n'échange pas la valeur désignée par i1 et i2 , le programme est mal formé, aucun diagnostic requis.
  2. Sinon, ranges:: swap ( * i1, * i2 ) si I1 et I2 modélisent tous deux indirectly_readable et si std:: iter_reference_t < I1 > et std:: iter_reference_t < I2 > modélisent swappable_with .
  3. Sinon, ( void ) ( * i1 = iter-exchange-move ( i2, i1 ) ) , si std:: indirectly_movable_storable < I1, I2 > et std:: indirectly_movable_storable < I2, I1 > sont tous deux modélisés, sauf que i1 n'est évalué qu'une seule fois.
  4. Sinon, ranges :: iter_swap ( i1, i2 ) est mal formé, ce qui peut entraîner une défaillance de substitution lorsque ranges :: iter_swap ( i1, i2 ) apparaît dans le contexte immédiat d'une instanciation de modèle.
  1. Cela empêche d'appeler la version non contrainte de std::iter_swap .

Objets de point de personnalisation

Le nom ranges::iter_swap désigne un objet de point de personnalisation , qui est un objet fonction const d'un type de classe littéral semiregular . Voir CustomizationPointObject pour plus de détails.

Exemple

Voir aussi

(C++20)
échange les objets pointés par deux itérateurs sous-jacents ajustés
(modèle de fonction)
(C++20)
échange les objets pointés par deux itérateurs sous-jacents
(modèle de fonction)
échange les éléments pointés par deux itérateurs
(modèle de fonction)