雙鏈表的迭代器類:node
template<class T> class iterator { public: //向前迭代 typedef forward_iterator_tag iterator_category; typedef T value_type; typedef ptrdiff_t difference_type; typedef T* pointer; typedef T& reference; //構造函數 iterator(chainNode<T> * theNode = NULL) { node = theNode; } //解引用操做符 T& operator*() const { return node->element; } T* operator->() const { return &node->element; } //迭代器加法操做 iterator& operator++()//前加 { node = node->next; return *this; } iterator operator++(int)//後加 { iterator old = *this; node = node->next; return old; } //相等檢驗 bool operator != (const iterator right) const { return node != right.node; } bool operator == (const iterator right) const { return node == right.node; } protected: chainNode<T>* node; }; iterator begin() { return iterator(firstNode); } iterator end() { return irerator(NULL); }
使用迭代器訪問鏈表元素和get()方法訪問元素,時間效率有很大的差異:
get()函數:O(listSize²)
迭代器:O(listSize)函數