## Class template optional_iterator

hamigaki::optional_iterator —

無効状態を持つ反復子

## Synopsis

    template<typename Iterator>
    class optional_iterator {
    public:
      // types
      typedef typename std::iterator_traits<Iterator>::value_type        value_type;
      typedef typename std::iterator_traits<Iterator>::reference         reference;
      typedef typename std::iterator_traits<Iterator>::pointer           pointer;
      typedef typename std::iterator_traits<Iterator>::difference_type   difference_type;
      typedef typename std::iterator_traits<Iterator>::iterator_category iterator_category;

      // construct/copy/destruct
      optional_iterator();
      optional_iterator(const Iterator&);

      // operators
      reference operator*() const;
      optional_iterator<Iterator>& operator++();
      bool operator==(const optional_iterator<Iterator>&) const;
      bool operator!=(const optional_iterator<Iterator>&) const;

      // queries
      const Iterator& base() const;

      private: Iterator current;
      private: bool valid;
    };

## Description

前進反復子はデフォルトコンストラクタを持っている。しかし、これにより初期化された個々の反復子は同値であるとは限らない。`optional_iterator`はデフォルトコンストラクタで反復子を無効状態とし、この無効状態の反復子を全て同値に扱う。

### `optional_iterator` construct/copy/destruct

1.     optional_iterator();

   Effects: |
       valid = false;

2.     optional_iterator(const Iterator& it);

   Effects: |
       current = it;
       valid = true;

### `optional_iterator` operators

1.     reference operator*() const;

   Returns: | `*current`

2.     optional_iterator<Iterator>& operator++();

   Effects: |
       ++current;
   Returns: | `*this`

3.     bool operator==(const optional_iterator<Iterator>& rhs) const;

   Effects: |
       if (valid && rhs.valid)
           return current == rhs.current;
       else if (!valid && !rhs.valid)
           return true;
       else
           return false;

4.     bool operator!=(const optional_iterator<Iterator>& rhs) const;

   Returns: | `!(*this == rhs)`

### `optional_iterator` queries

1.     const Iterator& base() const;

   Returns: | `current`

| 製作著作 © 2006, 2007 Takeshi Mouri