QT中迭代器的原理

来源:互联网 发布:六间房直播软件好用吗 编辑:程序博客网 时间:2024/05/26 20:22
按照自己的理解自己写的关于迭代器原理基本功能实现代码!不足之处请大家多多指教!微笑
#include <iostream>#define MAX 10using namespace std;/*节点类*/class Node{public:    int data;    Node *next;  };/*迭代器类*/class Iterator{public:    Iterator():ptr(NULL){}    Iterator(Node *node):ptr(node){}        int operator *()    {        return ptr->data;    }       Iterator & operator ++()    {        ptr = ptr->next;        return *this;    }     Iterator & operator ++(int)    {        Iterator *temp = NULL;           temp = this;        ptr = ptr->next;        return *temp;    }    Node *get_ptr()    {        return ptr;    }    private:    Node *ptr;       };/*链表类*/class Link{public:    Link(Node *node = NULL):head(NULL){}         void creat_link();      /*创建链表*/    void print();           /*打印链表*/    void free();            /*释放链表*/     /*得到链表头指针*/    Node *getHead()    {        return head;    }private:    Node *head; };void Link::creat_link(){    Node *temp = NULL;    Node *last = NULL;    int i = 0;        /*尾插法循环创建链表*/    for (i = 0; i < MAX; i++)    {           temp = new Node;                if (NULL == temp)        {            cout << "get space failed" << endl;        }          temp->data = i;        temp->next = NULL;                if (NULL == head)        {            head = last = temp;        }                else        {            last->next = temp;            last = temp;        }   }}void Link::print(){    Node *temp = head;    while (temp != NULL)    {        cout << "data:" << temp->data << endl;        temp = temp->next;    }}void Link::free(){     Node *temp = head;     while (head != temp)     {             head = head->next;         delete temp;         temp = head;     } }Iterator find_iterator(Iterator temp, int value){    Iterator it;    for (it = temp; it.get_ptr() != NULL; it++)    {        if (*it == value)        {            return it;        }    }}int main(int argc, char *argv[]){    Link a;    a.creat_link();        Iterator i(a.getHead());        for (; i.get_ptr() != NULL; i++)    {        cout << *i << endl;        }    a.free();    return 0;}

原创粉丝点击