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
-
optional_iterator();
-
optional_iterator(const Iterator& it);
Effects: |
current = it;
valid = true;
|
optional_iterator
operators
-
reference operator*() const;
-
optional_iterator<Iterator>& operator++();
Effects: |
++current;
|
Returns: |
*this
|
-
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;
|
-
bool operator!=(const optional_iterator<Iterator>& rhs) const;
optional_iterator
queries
-
const Iterator& base() const;