小工具知识网

当前位置: 首页 > 行业知识 > c++之迭代器与反向迭代器

行业知识

c++之迭代器与反向迭代器

2026-11-15 00:26:34 来源:互联网转载

)

  • 正向迭代器
    • 迭代器的变量与typedef与模版
    • operator++()
    • operator--()
    • operator*()
    • operator->()
    • 反向迭代器
      • 模版与typedef与变量
      • operator++()
      • operator--()
      • operator*()
      • operator->()

        正向迭代器

        以��表的迭代器为例

        ()

        具体的代码以及可以看上一篇链表的文章:链表

        迭代器的变量与typedef与模版

        这例typedef是因为不想写太长

        ()

        T代表类型

        Ref 可以设置const与非const的迭代器

        Ptr是传过来的其他类

        templatestruct __list__iterator{typedef listNode Node;typedef __list__iterator self;Node* _node;};

        operator++()

        因为迭代器是需要支持++遍历的所以要重载operator++()

        不同的编译器都可能不太一样

        self& operator++(){_node = _node->_next;return *this;}//后置self& operator++(int){self tmp(*this);_node = _node->_next;return tmp;}

        operator–()

        同时也要支持倒着遍历

        self& operator--(){_node= _node->_prev;return *this;}self& operator--(int){self tmp(*this);_node = _node->_prev;return tmp;}

        operator*()

        解引用找其对应的内容

        Ref operator*(){return _node->date;}

        operator->()

        这个是为了如果传过来的是类,可以访问其类里面的内容

        Ptr operator->(){return &_node->date;}

        反向迭代器

        反向迭代器因为和迭代器的代码太统一了,所以前辈们把反向迭代器进行了封装

        让其可以用于所有的反向迭代器,这样子所有的容器的可以用这个统一的反向迭代器

        模版与typedef与变量

        Iterator是传过来的类的正向迭代器

        Ref是判断const还是非const

        Prt是传过来的其他类

        为什么是传迭代器过来呢

        因为每个迭代器实现都不一样他要用不同的迭代器

        进行统一操作只能回调迭代器里面的东西

        templatestruct Reverselterator{typedef Reverselterator Self;Iterator cur;};

        operator++()

        因为是反向迭代器所以++就是往前走

        Self& operator++(){--cur;return *this;}

        operator–()

        反向迭代器–是往后走

        Self& operator--(){++cur;return *this;}

        operator*()

        因为我设置的end在链表中是哨兵位所以要往返回其上一位的节点

        找到上一个位置返回

        Ref operator*(){//找到上一个位置的值返回Iterator tmp = cur;--tmp;return *tmp;}

        operator->()

        operator()是*tmp引用返回就是返回他的指针的别名然后再->其内容*

        因为->->不好看所以前辈们做的特殊处理

        Prt operator->(){return &(operator*());}

上一篇:服务器网络端口哪里改名?

下一篇:服务器怎么下载github?