迭代器

来源:互联网 发布:js改变button文字 编辑:程序博客网 时间:2024/06/10 15:15

迭代器是C++中非常重要的结构,它是遍历不同容器的利刃!比如STL就是使用迭代器完成对list,vector,deque,set,map等容器元素的访问。迭代器简单来说可以看作指针,但不仅仅是指针,实际上是基于指针建立起来的类。其本质是对象!

以链表linklist类为例,设计它的一个迭代器:

template<typename T>class linklist{private:node<T> *head;node<T> *before;int size;public:linklist(){head=NULL;before=NULL;size=0;}void addfirst(T ele);//将元素添加到链表头void addlast(T ele);//将元素添加到链表尾T getfirst();//返回链表头元素T getlast();//返回链表尾元素T removefirst();//删除链表头元素T removelast();//删除链表尾元素void add(T ele);//将一个新元素附加到列表表尾void add(int index,T ele);//将一个新元素附加到列表指定位置void clear();//删除列表所有元素bool con(T ele);//判断元素是否存在于链表T get(int index);//返回指定位置处元素int get1stindex(T ele);//返回列表里第一次匹配的下标bool empty();//判断空int getlastindex(T ele);//返回列表里最后一次匹配的下标void remove(T ele);//删除链表指定元素int getsize();//返回链表元素数目T remove(int index);//删除链表指定位置元素并返回T set(int index,T ele);//设置index为新值ele,并返回旧值iterator<T> begin(){return iterator<T>(head);}//从链表获取迭代器,利用链表头获取迭代器开始iterator<T> end(){return iterator<T>(before->next);}//从链表获取迭代器,利用链表尾获取迭代器结束</span>};
迭代器类实现:

template<typename T>class iterator{private:node<T> *p;public:iterator(node<T> *p){this->p=p;}    iterator operator++();      T operator*();    bool operator==(iterator<T>&it1);    bool operator!=(iterator<T>&it1);};template<typename T>iterator& iterator<T>::operator++(){p=p->next;return (*this);}template<typename T>T iterator<T>::operator*(){return p->ele;}template<typename T>bool iterator<T>::operator==(iterator<T>&it1){if(p==it1.p) return true;else return false;}template<typename T>bool iterator<T>::operator!=(iterator<T>&it1){return !operator==();}
linklist类定义了begin().end()函数给迭代器返回,这样迭代器既可以对链表进行元素遍历了。

0 0
原创粉丝点击