「DesignPattern/IteratorPattern/CppCode1」の編集履歴(バックアップ)一覧はこちら

DesignPattern/IteratorPattern/CppCode1」(2008/09/10 (水) 21:27:08) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

//cpp/linenumber #include <iostream> #include <vector> using namespace std; template <typename T> struct iteratable { virtual ~iteratable() {} virtual const bool has_next() = 0; virtual void next() = 0; virtual const T get_value() = 0; }; template <typename Iterator> struct aggregatable { virtual ~aggregatable() {} virtual Iterator iterator_begin() = 0; }; template <typename T, typename List> class element_iterator : public iteratable<T> { const List &list_; size_t index_; public : element_iterator(const List &list) : list_(list), index_(0) {} const bool has_next() { return (list_.get_last_num() > index_) ? true : false; } void next() { ++index_; } const T get_value() { return list_.get_value_at(index_); } }; template <typename T> class element_list : public aggregatable<element_iterator<T, element_list<T> > > { T *plist_; size_t last_; public : typedef element_iterator<T, element_list<T> > iterator; element_list(const size_t count) : plist_(new T[count]), last_(0) { } ~element_list() { delete [] plist_; } void add(const T val) { plist_[last_++] = val; } const T get_value_at(const size_t index) const { return plist_[index]; } const size_t get_last_num() const { return last_; } element_iterator<T, element_list<T>> iterator_begin() { return element_iterator<T, element_list<T> >(*this); } }; int main() { element_list<int> list(5); for (int i = 0; i < 5; ++i) { list.add(i); } element_list<int>::iterator it = list.iterator_begin(); for ( it; it.has_next(); it.next()) { cout << it.get_value() << endl; } }
//cpp/linenumber #include <iostream> using namespace std; template <typename T> struct iteratable { virtual ~iteratable() {} virtual const bool has_next() = 0; virtual void next() = 0; virtual const T get_value() = 0; }; template <typename Iterator> struct aggregatable { virtual ~aggregatable() {} virtual Iterator iterator_begin() = 0; }; template <typename T, typename List> class element_iterator : public iteratable<T> { const List &list_; size_t index_; public : element_iterator(const List &list) : list_(list), index_(0) {} const bool has_next() { return (list_.get_last_num() > index_) ? true : false; } void next() { ++index_; } const T get_value() { return list_.get_value_at(index_); } }; template <typename T> class element_list : public aggregatable<element_iterator<T, element_list<T> > > { T *plist_; size_t last_; public : typedef element_iterator<T, element_list<T> > iterator; element_list(const size_t count) : plist_(new T[count]), last_(0) { } ~element_list() { delete [] plist_; } void add(const T val) { plist_[last_++] = val; } const T get_value_at(const size_t index) const { return plist_[index]; } const size_t get_last_num() const { return last_; } element_iterator<T, element_list<T>> iterator_begin() { return element_iterator<T, element_list<T> >(*this); } }; int main() { element_list<int> list(5); for (int i = 0; i < 5; ++i) { list.add(i); } element_list<int>::iterator it = list.iterator_begin(); for ( it; it.has_next(); it.next()) { cout << it.get_value() << endl; } }

表示オプション

横に並べて表示:
変化行の前後のみ表示: