Condividi tramite


Classe istream_iterator

Descrive un oggetto iteratore di input. Estrae oggetti della classe Type da un flusso di input a cui accede tramite un oggetto archiviato, di tipo pointer a basic_istreamCharType<, . Traits>

Sintassi

template <class Type, class CharType = char, class Traits = char_traits<CharType>, class Distance = ptrdiff_t>
class istream_iterator
: public iterator<
    input_iterator_tag, Type, Distance,
    const Type *,
    const Type&>;

Parametri

Type
Tipo di oggetto da estrarre dal flusso di input.

CharType
Tipo che rappresenta il tipo di carattere per istream_iterator. Questo argomento è facoltativo e il valore predefinito è char.

Tratti
Tipo che rappresenta il tipo di carattere per istream_iterator. Questo argomento è facoltativo e il valore predefinito è char_traits<CharType>.

Distanza
Tipo integrale con segno che rappresenta il tipo di differenza per istream_iterator. Questo argomento è facoltativo e il valore predefinito è ptrdiff_t.

Dopo la costruzione o l'incrementazione di un oggetto della classe istream_iterator con un puntatore archiviato diverso da Null, l'oggetto tenta di estrarre e archiviare un oggetto di tipo Type dal flusso di input associato. Se l'estrazione ha esito negativo, l'oggetto sostituisce il puntatore archiviato con un puntatore Null, creando così un indicatore di fine della sequenza.

Costruttori

Costruttore Descrizione
istream_iterator Costruisce un iteratore di fine flusso come istream_iterator predefinito o un istream_iterator inizializzato nel tipo di flusso dell'iteratore da cui legge.

Typedef

Nome tipo Descrizione
char_type Tipo che fornisce il tipo di carattere di istream_iterator.
istream_type Tipo che fornisce il tipo di flusso di istream_iterator.
traits_type Tipo che fornisce il tipo di tratti di istream_iterator.

Operatori

Operatore Descrizione
operator* L'operatore di dereferenziazione restituisce l'oggetto archiviato di tipo Type a cui punta istream_iterator.
operator-> Restituisce il valore di un numero, se presente.
operator++ Estrae un oggetto incrementato dal flusso di input oppure copia tale oggetto prima di incrementarlo e restituisce la copia.

Requisiti

Header:<iterator>

Spazio dei nomi: std

istream_iterator::char_type

Tipo che fornisce il tipo di carattere di istream_iterator.

typedef CharType char_type;

Osservazioni:

Il tipo è un sinonimo del parametro di modello Chartype.

Esempio

// istream_iterator_char_type.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;

   typedef istream_iterator<int>::char_type CHT1;
   typedef istream_iterator<int>::traits_type CHTR1;

   // Standard iterator interface for reading
   // elements from the input stream:
   cout << "Enter integers separated by spaces & then\n"
        << " any character ( try example: '2 4 f' ): ";

   // istream_iterator for reading int stream
   istream_iterator<int, CHT1, CHTR1> intRead ( cin );

   // End-of-stream iterator
   istream_iterator<int, CHT1, CHTR1> EOFintRead;

   while ( intRead != EOFintRead )
   {
      cout << "Reading:  " << *intRead << endl;
      ++intRead;
   }
   cout << endl;
}

istream_iterator::istream_iterator

Costruisce un iteratore di fine flusso come istream_iterator predefinito o un istream_iterator inizializzato nel tipo di flusso dell'iteratore da cui legge.

istream_iterator();

istream_iterator(istream_type& _Istr);

Parametri

_Istr
Flusso di input da leggere usato per inizializzare l'oggetto istream_iterator.

Osservazioni:

Il primo costruttore inizializza il puntatore del flusso di input con un puntatore Null e crea un iteratore di fine flusso. Il secondo costruttore inizializza il puntatore del flusso di input con &_Istr, quindi tenta di estrarre e archiviare un oggetto di tipo Type.

L'iteratore end-of-stream può essere usato per verificare se un oggetto istream_iterator ha raggiunto la fine di un flusso.

Esempio

// istream_iterator_istream_iterator.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <algorithm>
#include <iostream>

int main( )
{
   using namespace std;

   // Used in conjunction with copy algorithm
   // to put elements into a vector read from cin
   vector<int> vec ( 4 );
   vector <int>::iterator Iter;

   cout << "Enter 4 integers separated by spaces & then\n"
        << " a character ( try example: '2 4 6 8 a' ): ";
   istream_iterator<int> intvecRead ( cin );

   // Default constructor will test equal to end of stream
   // for delimiting source range of vecor
   copy ( intvecRead , istream_iterator<int>( ) , vec.begin ( ) );
   cin.clear ( );

   cout << "vec = ";
   for ( Iter = vec.begin( ) ; Iter != vec.end( ) ; Iter++ )
      cout << *Iter << " "; cout << endl;
}

istream_iterator::istream_type

Tipo che fornisce il tipo di flusso di istream_iterator.

typedef basic_istream<CharType, Traits> istream_type;

Osservazioni:

Il tipo è un sinonimo di basic_istream<CharType, Traits.>

Esempio

Vedere istream_iterator per un esempio di come dichiarare e usare istream_type.

istream_iterator::operator*

L'operatore di dereferenziazione restituisce l'oggetto archiviato di tipo Type a cui punta istream_iterator.

const Type& operator*() const;

Valore restituito

Oggetto archiviato di tipo Type.

Esempio

// istream_iterator_operator.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <algorithm>
#include <iostream>

int main( )
{
   using namespace std;

   cout << "Enter integers separated by spaces & then\n"
        << " a character ( try example: '2 4 6 8 a' ): ";

   // istream_iterator from stream cin
   istream_iterator<int> intRead ( cin );

   // End-of-stream iterator
   istream_iterator<int> EOFintRead;

   while ( intRead != EOFintRead )
   {
      cout << "Reading:  " << *intRead << endl;
      ++intRead;
   }
   cout << endl;
}

istream_iterator::operator->

Restituisce il valore di un numero, se presente.

const Type* operator->() const;

Valore restituito

Valore di un membro, se presente.

Osservazioni:

i->m equivale a (*i).m

L'operatore restituisce &*this.

Esempio

// istream_iterator_operator_vm.cpp
// compile with: /EHsc
#include <iterator>
#include <iostream>
#include <complex>

using namespace std;

int main( )
{
   cout << "Enter complex numbers separated by spaces & then\n"
        << " a character pair ( try example: '(1,2) (3,4) (a,b)' ): ";

   // istream_iterator from stream cin
   istream_iterator< complex<double> > intRead ( cin );

   // End-of-stream iterator
   istream_iterator<complex<double> > EOFintRead;

   while ( intRead != EOFintRead )
   {
      cout << "Reading the real part: " << intRead ->real( ) << endl;
      cout << "Reading the imaginary part: " << intRead ->imag( ) << endl;
      ++intRead;
   }
   cout << endl;
}

istream_iterator::operator++

Estrae un oggetto incrementato dal flusso di input oppure copia tale oggetto prima di incrementarlo e restituisce la copia.

istream_iterator<Type, CharType, Traits, Distance>& operator++();

istream_iterator<Type, CharType, Traits, Distance> operator++(int);

Valore restituito

Il primo operatore membro restituisce un riferimento all'oggetto incrementato di tipo Type estratto dal flusso di input e la seconda funzione membro restituisce una copia dell'oggetto.

Esempio

// istream_iterator_operator_incr.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <algorithm>
#include <iostream>

int main( )
{
   using namespace std;

   cout << "Enter integers separated by spaces & then\n"
        << " a character ( try example: '2 4 6 8 a' ): ";

   // istream_iterator from stream cin
   istream_iterator<int> intRead ( cin );

   // End-of-stream iterator
   istream_iterator<int> EOFintRead;

   while ( intRead != EOFintRead )
   {
      cout << "Reading:  " << *intRead << endl;
      ++intRead;
   }
   cout << endl;
}

istream_iterator::traits_type

Tipo che fornisce il tipo di tratti di istream_iterator.

typedef Traits traits_type;

Osservazioni:

Il tipo è un sinonimo del parametro di modello Traits.

Esempio

// istream_iterator_traits_type.cpp
// compile with: /EHsc
#include <iterator>
#include <iostream>

int main( )
{
   using namespace std;

   typedef istream_iterator<int>::char_type CHT1;
   typedef istream_iterator<int>::traits_type CHTR1;

   // Standard iterator interface for reading
   // elements from the input stream:
   cout << "Enter integers separated by spaces & then\n"
        << " any character ( try example: '10 20 a' ): ";

   // istream_iterator for reading int stream
   istream_iterator<int, CHT1, CHTR1> intRead ( cin );

   // End-of-stream iterator
   istream_iterator<int, CHT1, CHTR1> EOFintRead;

   while ( intRead != EOFintRead )
   {
      cout << "Reading:  " << *intRead << endl;
      ++intRead;
   }
   cout << endl;
}

Vedi anche

Struct input_iterator_tag
Struct iterator
<iterator>
Thread Safety in the C++ Standard Library (Sicurezza dei thread nella libreria standard C++)
Informazioni di riferimento per la libreria standard C++