VMS Help
CXXLSTD, Iterators, istream_iterator

 *Conan The Librarian

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   istream_iterator  - Stream iterator that provides iterator
   capabilities for istreams.  This iterator allows generic algorithms
   to	be used	directly on streams.

 SYNOPSIS

   #include <iterator>

   template <class T, class charT, class	traits = ios_traits<charT>,
 	   class Distance = ptrdiff_t>
   class	istream_iterator : public iterator<input_iterator_tag,
 				T,Distance>;

 DESCRIPTION

   Stream iterators provide the standard	iterator interface for input
   and output streams.

   The class istream_iterator reads elements from an input stream
   (using operator >>).	 A value of type T is retrieved	and stored
   when	the iterator is constructed and each time operator++ is
   called.  The iterator will	be equal	to the end-of-stream
   iterator value if the end-of-file is reached. Use the constructor
   with no arguments	to create an end-of-stream iterator. The only
   valid use of	this iterator is to compare to other iterators when
   checking for end of file.  Do	not attempt to dereference the
   end-of-stream iterator;  it	plays the same role as the
   past-the-end	iterator provided by the end() function of
   containers.  Since an istream_iterator is an input iterator, you
   cannot assign to the value returned by dereferencing the iterator.
   This also means that istream_iterators can	only be	used for sin-
   gle pass algorithms.

   Since	a new value is read every time the operator++ is used on an
   istream_iterator, that operation is not equality-preserving.	This
   means that i == j does not mean that ++i ==	++j  (although two
   end-of-stream iterators are	always equal).

 INTERFACE

   template <class T, class charT, class	traits = ios_traits<charT>
 	   class Distance = ptrdiff_t>
   class	istream_iterator : public iterator<input_iterator_tag,
 					   T, Distance>
    {

   public:
      typedef T value_type;
      typedef charT char_type;
      typedef traits traits_type;
      typedef basic_istream<charT,traits> istream_type;

      istream_iterator();
      istream_iterator (istream_type&);
      istream_iterator
 	    (const stream_iterator<T,charT,traits,Distance>&);
       ~istream_itertor ();

      const T& operator*() const;
      const T* operator ->() const;
      istream_iterator <T,charT,traits,Distance>& operator++();
      istream_iterator <T,charT,traits,Distance>	 operator++ (int)
    };

   // Non-member	Operators

   template <class T, class charT, class	traits,	class Distance>
   bool operator==(const	istream_iterator<T,charT,traits,Distance>&,
 		const istream_iterator<T,charT,traits,Distance>&);

   template <class T, class charT, class	traits,	 class Distance>
   bool operator!=(const	istream_iterator<T,charT,traits,Distance>&,
 		const istream_iterator<T,charT,traits,Distance>&);

 TYPES

   value_type;
      Type of value to stream in.

   char_type;
      Type of character the stream is built on.

   traits_type;
      Traits used to build the stream.

   istream_type;
      Type of stream this iterator is constructed on.

 CONSTRUCTORS

   istream_iterator(); Construct an end-of-stream	iterator.
   This	iterator can be	used to	compare against an end-of-stream
   condition. Use it to	provide	end iterators to	algorithms

   istream_iterator(istream& s);
      Construct an istream_iterator on the given	stream.

   istream_iterator(const istream_iterator& x);
      Copy constructor.

 DESTRUCTORS

   ~istream_iterator();
      Destructor.

 OPERATORS

   const	T&
   operator*() const;
      Return the	current	value stored by	the iterator.

   const	T*
   operator->() const;
      Return a pointer to the current value stored by the iterator.

   istream_iterator& operator++()
   istream_iterator operator++(int)
      Retrieve the next element from the	input stream.

 NON-MEMBER OPERATORS

   bool
   operator==(const istream_iterator<T,charT,traits,Distance>& x,
 	     const istream_iterator<T,charT,traits,Distance>& y)
 		Equality operator. Returns true	if x is	the same as y.

   bool
   operator!=(const istream_iterator<T,charT,traits,Distance>& x,
 	     const istream_iterator<T,charT,traits,Distance>& y)
 		Inequality operator. Returns true if x is not the same
                 as y.

 EXAMPLE

   //
   // io_iter.cpp
   //
    #include <iterator>
    #include <vector>
    #include <numeric>
    #include <iostream.h>

   int main ()
    {
     vector<int>	d;
     int	total =	0;
      //
      //	Collect	values from cin	until end of file
      //	Note use of default constructor	to get ending iterator
      //
     cout << "Enter a sequence of integers (eof to quit): " ;
     copy(istream_iterator<int,char>(cin),
 	  istream_iterator<int,char>(),
 	 inserter(d,d.begin()));
      //
      //	stream the whole vector	and the	sum to cout
      //
     copy(d.begin(),d.end()-1,
 	 ostream_iterator<int,char>(cout," + "));
     if (d.size())
       cout << *(d.end()-1) << "	= " <<
 	   accumulate(d.begin(),d.end(),total) << endl;
     return 0;
    }

 WARNING

   If your compiler does	not support default template parameters, then
   you will need to always supply the Allocator template argument.  And
   you'll have to provide all parameters to the	istream_iterator
   template.  For instance, you'll have	to write :

   vector<int, allocator<int> >

   instead of :

   vector<int>

 SEE ALSO

   iterators, ostream_iterators

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee
  Close     Help