inicio GeNeura cursos

istream_iterator


istream_iterator es un iterador de entrada conectado a un flujo de entrada. Este iterador tiene un interfaz muy limitado que hace que su implementación sea muy sencilla.


template <class T, class Distance = ptrdiff_t> 
class istream_iterator 
{
public:
  typedef input_iterator_tag iterator_category;
  typedef T                  value_type;
  typedef Distance           difference_type;
  typedef const T*           pointer;
  typedef const T&           reference;

  istream_iterator() : stream(&cin), end_marker(false) {}
  istream_iterator(istream& s) : stream(&s) { read(); }
  reference operator*() const { return value; }
  pointer operator->() const { return &(operator*()); }
  istream_iterator<T, Distance>& operator++() { 
    read(); 
    return *this;
  }
  istream_iterator<T, Distance> operator++(int)  {
    istream_iterator<T, Distance> tmp = *this;
    read();
    return tmp;
  }

protected:
  istream* stream;
  T value;
  bool end_marker;
  void read() {
    end_marker = (*stream) ? true : false;
    if (end_marker) *stream >> value;
    end_marker = (*stream) ? true : false;
  }
private:
  friend bool operator== (const istream_iterator<T, Distance>& x,
                          const istream_iterator<T, Distance>& y);
};

Ejercicios

  1. Utiliza un istream_iterator para leer todas las palabras de un fichero e imprimirlo por salida estandar.
  2. Imprime los primeros números de la sucesión de fibonacci en un fichero y despues recuperalos utilizando un istream_iterator.