Namespaces
Variants

std::istream_iterator

De fr.cppreference.net
 
 
Bibliothèque d'itérateurs
Concepts d'itérateurs
Primitives d'itérateur
Concepts et utilitaires d'algorithmes
Concepts invocables indirects
Exigences communes d'algorithmes
(C++20)
(C++20)
(C++20)
Utilitaires
(C++20)
Adaptateurs d'itérateurs
Accès aux plages
(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>
template< class T,
          class CharT = char,
          class Traits = std::char_traits<CharT>,
          class Distance = std::ptrdiff_t >
class istream_iterator
    : public std::iterator<std::input_iterator_tag, T, Distance, const T*, const T&>
(jusqu'à C++17)
template< class T,
          class CharT = char,
          class Traits = std::char_traits<CharT>,
          class Distance = std::ptrdiff_t >
class istream_iterator;
(depuis C++17)

std::istream_iterator est un itérateur d'entrée à passage unique qui lit des objets successifs de type T à partir de l'objet std::basic_istream pour lequel il a été construit, en appelant l'opérateur operator>> approprié. L'opération de lecture réelle est effectuée lorsque l'itérateur est incrémenté, pas lorsqu'il est déréférencé. Le premier objet est lu lors de la construction de l'itérateur. Le déréférencement ne renvoie qu'une copie de l'objet le plus récemment lu.

Le std::istream_iterator construit par défaut est connu sous le nom d'itérateur de fin de flux. Lorsqu'un std::istream_iterator valide atteint la fin du flux sous-jacent, il devient égal à l'itérateur de fin de flux. Le déréférencer ou l'incrémenter davantage invoque un comportement indéfini. Un itérateur de fin de flux reste dans l'état de fin de flux même si le flux sous-jacent change d'état. En l'absence d'une réaffectation, il ne peut plus devenir un itérateur non-fin de flux.

Une implémentation typique de std::istream_iterator contient deux membres de données : un pointeur vers l'objet std::basic_istream associé et la valeur la plus récemment lue de type T.

T doit satisfaire aux exigences DefaultConstructible, CopyConstructible et CopyAssignable.

Types membres

Type de membre Définition
iterator_category std:: input_iterator_tag
value_type T
difference_type Distance
pointer const T *
reference const T &
char_type CharT
traits_type Traits
istream_type std:: basic_istream < CharT, Traits >

Les types membres iterator_category , value_type , difference_type , pointer et reference doivent être obtenus en héritant de std:: iterator < std:: input_iterator_tag , T, Distance, const T * , const T & > .

(jusqu'à C++17)

Fonctions membres

construit un nouveau istream_iterator
(fonction membre publique)
détruit un istream_iterator , incluant la valeur mise en cache
(fonction membre publique)
retourne l'élément courant
(fonction membre publique)
avance l'itérateur
(fonction membre publique)

Fonctions non membres

(supprimé en C++20)
compare deux istream_iterator s
(modèle de fonction)

Notes

Lors de la lecture de caractères, std::istream_iterator ignore les espaces par défaut (sauf s'il est désactivé avec std::noskipws ou équivalent), tandis que std::istreambuf_iterator ne le fait pas. De plus, std::istreambuf_iterator est plus efficace, car il évite la surcharge de construction et de destruction de l'objet sentinelle à chaque caractère.

Exemple

#include <algorithm>
#include <iostream>
#include <iterator>
#include <numeric>
#include <sstream>

int main()
{
    std::istringstream str("0.1 0.2 0.3 0.4");
    std::partial_sum(std::istream_iterator<double>(str),
                     std::istream_iterator<double>(),
                     std::ostream_iterator<double>(std::cout, " "));
    
    std::istringstream str2("1 3 5 7 8 9 10");
    auto it = std::find_if(std::istream_iterator<int>(str2),
                           std::istream_iterator<int>(),
                           [](int i){ return i % 2 == 0; });
    
    if (it != std::istream_iterator<int>())
        std::cout << "\nThe first even number is " << *it << ".\n";
    //" 9 10" left in the stream
}

Sortie :

0.1 0.3 0.6 1
The first even number is 8.

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 tel que publié Comportement correct
P0738R2 C++98 la première lecture pourrait être reportée jusqu'au premier déréférencement toujours effectuée dans le constructeur

Voir aussi

itérateur de sortie qui écrit vers std::basic_ostream
(modèle de classe)
itérateur d'entrée qui lit depuis std::basic_streambuf
(modèle de classe)