Namespaces
Variants

std:: istream_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)
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 depuis l'objet std::basic_istream pour lequel il a été construit, en appelant l' operator >> approprié. L'opération de lecture effective est réalisée lorsque l'itérateur est incrémenté, et non lors de son déréférencement. 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érencement ou l'incrémentation ultérieure invoque un comportement indéfini. Un itérateur de fin de flux reste dans l'état de fin de flux même si l'état du flux sous-jacent change. En l'absence de réaffectation, il ne peut plus redevenir 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 .

Table des matières

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)