hamigaki.png

前のページ 上に戻る ホーム 次のページ

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-2008 Takeshi Mouri

前のページ 上に戻る ホーム 次のページ