【C++模拟实现】反向迭代器的实现

【C++模拟实现】反向迭代器的实现

目录

  • 【C++模拟实现】反向迭代器的实现
      • 反向迭代器的代码示例
      • 反向迭代器的模拟实现要点
        • 引入iterator模版参数
        • rbegin()和rend()的实现

作者:爱写代码的刚子

时间:2023.9.5

前言:本篇博客主要介绍反向迭代器的实现,通过对正向迭代器的复用以及模版的使用来实现反向迭代器。


反向迭代器的代码示例

namespace test
{
    template<class iterator,class Ref,class Ptr>
    struct __reverse_iterator
    {
        typedef __reverse_iterator<iterator,Ref,Ptr> Self;
        iterator _it;

        //构造函数
        __reverse_iterator(iterator it)
                :_it(it)
        {}
				//	运算符重载
        Ref operator*()
        {
            iterator tmp(_it);
            return *(--tmp);
        }

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

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

        Self& operator++()
        {
            --_it;
            return *this;
        }
        bool operator!=(const Self& l) const{
            return _it!=l._it;
        }
    };
}

反向迭代器的模拟实现要点

引入iterator模版参数

引入iterator模版参数,与vector、list等容器的iterator实现基本相同,但是对it指针的处理相反。在使用模拟实现的reverse_iterator时需要传入对应的类型,并使用typedef。例:vector中:

【C++模拟实现】反向迭代器的实现_第1张图片

rbegin()和rend()的实现

以vector举例:

【C++模拟实现】反向迭代器的实现_第2张图片

注意函数名和传入参数的不同!在实现reverse_iterator时也要注意


由于reverse_iterator复用了iterator的部分逻辑,实现大体相同。(提供的示例代码中后置++和–的运算符重载没有提供实现)

你可能感兴趣的:(C++进阶,c++,windows,开发语言)