【C++】STL——list(部分功能模拟实现、迭代器、反向迭代器)

list 介绍

STL中的list底层实现是用带头循环的双链表,这种结构设计巧妙的使得list能够在随机位置插入删除的效率搞,但处理不了大量数据,相比于vector,vector的随机位置删除的速度就低于list ,因为vector需要挪动数据,而list直接把链子相接就可以了
在这里插入图片描述
那么list在使用的时候不难,stl的容器相似性很强,所以这次list的实现能更让我们学会c++关于封装的理解,c++类和对象的巩固,通过各种模板的类型,迭代器的封装,反向迭代器的封装使用

构造函数、拷贝构造函数、析构函数

我们在写链表的时候,都需要重新定义一个链表的结构体,现在也不例外
封装一个链表类

 template<class T>
  struct list_Node
  {
   
    T _data;
    list_Node<T>* _next;//下一个链表指针
    list_Node<T>* _prev;//上一个链表指针
	//链表的构造函数
    list_Node(const T& x = T())
      :_data(x)
       ,_next(nullptr)
       ,_prev(nullptr)
    {
   }
  };

在此需要再封装一个迭代器

迭代器

这个封装的迭代器是指属于list的,我们之前学习迭代器把他看作指针一样,这次的话我们把迭代器看作是一个迭代器类,不再是所谓一样上的指针

//迭代器的模板ref = T&  ptr = T*  
 template<class T,class ref,class prt>
  struct __list_iterator
  {
   
    typedef list_Node<T> node; //将链表类重新命名
    typedef __list_iterator<T, ref ,prt> iterator; //迭代器类重新命名
    

    __list_iterator(node* node)
      :_node(node)
    {
   }
    //迭代器的解引用
    ref operator*()
    {
   
      return _node->_data;
    }

    prt operator->()
    {
   
    //重载-> 是因为 在使用list访问 data的时候,会出现 lt -> -> _data 的情况
    //所以返回解引用后的地址
      return &(operator*());
    }
    bool operator==(const iterator& it)const
    {
   
     return _node== it._node; 
    }
    bool operator!=(const iterator& it)const
    {
   
      return _node!=it._node;
    }
    iterator& operator+&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值