Namespaces
Variants

iter_move (std::common_iterator)

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)
friend constexpr decltype ( auto ) iter_move ( const std:: common_iterator & i )

noexcept ( noexcept ( ranges:: iter_move ( std:: declval < const I & > ( ) ) )

requires std:: input_iterator < I > ;
(depuis C++20)

Convertit le résultat de la déréférenciation de l'itérateur sous-jacent en son type de référence rvalue associé.

Le corps de la fonction est équivalent à : return std :: ranges:: iter_move ( std :: get < I > ( i. var ) ) ; .

Cette fonction n'est pas visible par la recherche non qualifiée ou qualifiée ordinaire, et ne peut être trouvée que par la recherche dépendante des arguments lorsque std:: common_iterator < I, S > est une classe associée des arguments.

Si i. var ne contient pas un objet I (c'est-à-dire un itérateur), le comportement est indéfini.

Table des matières

Paramètres

i - un adaptateur d'itérateur source

Valeur de retour

Une référence rvalue ou un temporaire prvalue.

Complexité

Constante.

Exemple

#include <iomanip>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
void print(auto const& rem, auto const& v)
{
    std::cout << rem << '[' << size(v) << "] { ";
    for (int o{}; auto const& s : v)
        std::cout << (o++ ? ", " : "") << std::quoted(s);
    std::cout << " }\n";
}
int main()
{
    std::vector<std::string> p{"Andromeda", "Cassiopeia", "Phoenix"}, q;
    print("p", p);
    print("q", q);
    using CTI = std::counted_iterator<std::vector<std::string>::iterator>;
    using CI = std::common_iterator<CTI, std::default_sentinel_t>;
    CI last{std::default_sentinel};
    for (CI first{{p.begin(), 2}}; first != last; ++first)
        q.emplace_back(/* ADL */ iter_move(first));
    print("p", p);
    print("q", q);
}

Sortie possible :

p[3] { "Andromeda", "Cassiopeia", "Phoenix" }
q[0] {  }
p[3] { "", "", "Phoenix" }
q[2] { "Andromeda", "Cassiopeia" }

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 3953 C++20 le type de retour était std:: iter_rvalue_reference_t < I > modifié en decltype ( auto )

Voir aussi

(C++20)
convertit le résultat du déréférencement d'un objet en son type de référence rvalue associé
(objet de point de personnalisation)
(C++20)
convertit le résultat du déréférencement de l'itérateur sous-jacent en son type de référence rvalue associé
(fonction)
(C++11)
convertit l'argument en une xvalue
(modèle de fonction)
convertit l'argument en une xvalue si le constructeur de déplacement ne lève pas d'exception
(modèle de fonction)
(C++11)
transmet un argument de fonction et utilise l'argument de modèle de type pour préserver sa catégorie de valeur
(modèle de fonction)
déplace une plage d'éléments vers un nouvel emplacement
(objet fonction algorithme)
déplace une plage d'éléments vers un nouvel emplacement dans l'ordre inverse
(objet fonction algorithme)