小工具知识网

当前位置: 首页 > 行业知识 > 【C++】list模拟实现+反向迭代器

行业知识

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

2026-11-07 15:13:43 来源:互联网转载

list模拟实现

  • list定义
  • list用法
    • list iterator的使用
      • begin() + end()
      • rbegin()+rend()
      • reverse()
      • sort()
      • merge()
      • unique()
      • remove()
      • splice()
      • list模拟实现
        • struct和class的区别
        • list三个类模板
        • 默认成员函数
          • 构造函数
          • 拷贝构造函数
          • 赋值运算符重载
          • 析构函数
          • 数据修改操作
            • push_back()
            • push_front()
            • pop_back()
            • pop_front()
            • swap()
            • clear()
            • insert()
            • erase()
            • 容量操作
              • size
              • empty
              • 数据访问操作
                • front()
                • back()
                • 迭代器
                  • 正向迭代器
                    • 构造函数
                    • begin() + end()
                    • const_iterator begin()/end()const
                    • operator*()
                    • operator->()
                    • operator!=()
                    • operator==()
                    • 前置++和后置++
                    • 前置--和后置--
                    • 反向迭代器
                      • 定义
                      • 构造函数
                      • rbegin() + rend()
                      • const_reverse_iterator rbegin()/rend()const
                      • operator*()
                      • operator->()
                      • operator!=()
                      • operator==()
                      • 前置++和后置++
                      • 前置--和后置--
                      • list���拟实现总代码

                        铁汁们,今天给大家分享一篇list模拟实现+反向迭代器,来吧,开造⛳️

                        list定义

                        list name ;

                        • list底层是带头双向循环链表结构,且该容器可以前后双向迭代。

                        • 双向链表中每个元素存储互不相关的独立节点,在结点中通过指针访问其前一个元素和后一个元素。

                        • list允许在任意位置进行插入和删除操作,时间复杂度为O(1),时间效率高。

                        • list不支持任意位置的随即访问,若想要访问某个位置,必须从已知的位置(头部或者尾部)迭代到该位置,时间开销为O(n)。

                        • list需要额外的空间开销,用来保存每个节点的相关联信息。

                        • typename为任意类型,例如:int、char、double、string、vector。

                          list用法

                          list iterator的使用

                          begin() + end()

                          iterator begin( )、const_iterator begin( )const ;

                          • 功能:返回第一个元素的位置(迭代器)。

                            Tips:const_iterator表示对迭代器进行解引用后的值(*it)不能被修改,而迭代器本身(it)可以被修改。const修饰this指针,表示在该成员函数中成员变量不允许被修改,此处const的用法只能用于类中的成员函数。

                            iterator end( )、const_iterator end( )const ;

                            • 功能:返回最后一个元素的下一个位置(迭代器)。

                              rbegin()+rend()

                              iterator begin( )、const_iterator rbegin( )const ;

                              • 功能:返回第一个元素的前一个位置(迭代器)。

                                iterator rend( )、const_iterator rend( )const ;

                                • 功能:返回第一个元素的位置(迭代器)。

                                  reverse()

                                  void reverse( ) ;

                                  • 功能 : 逆置,将list中元素的顺序进行颠倒 。

                                    sort()

                                    void sort( ) ;

                                    • 功能:排序,默认为升序。模板参数中的默认仿函数为less。

                                      Tips:list中的sort为归并排序,算法库中的sort为快排。

                                      #define _CRT_SECURE_NO_WARNINGS 1#include#includeusing namespace std;int main(){list lt1;lt1.push_back(4);lt1.push_back(1);lt1.push_back(3);lt1.push_back(2);    lt1.sort();    for (auto& e : lt1){cout listcout cout listcout cout listcout cout listcout cout cout cout listcout cout cout cout listcout cout cout cout   //struct类未用访问限定符修饰的变量为public,在类外指定类域就可以直接进行访问ListNode* _prev;  //带头双向循环链表ListNode* _next;T _data;}template   //class类未用访问限定符修饰的变量为private,在类外不可以访问public:typedef ListNode typedef ListNodecout cout _head = new Node;_head-_prev = _head;_head-_next = _head;}CreatHead();}CreatHead();for (int i = 0; i _next;prev->_next = next;next->_prev = prev;delete cur;  //cur = nullptr;return next;  //返回删除节点的下一个节点}//AccessT& front(){return _head->_next->_data;}const T& front()const{return _head->_next->_data;}T& back(){return _head->_prev->_data;}const T& back()const{return _head->_prev->_data;}//Capacitysize_t size()const{size_t count = 0;for (auto const& e : *this){count++;}return count;}bool empty()const{return size() == 0;}Node* _head; //头指针,该指针指向的节点为头节点,不存储任何有效数据//头节点中的_data不能存储后面节点的总个数,原因:若T为char型,数据个数过大,会数据溢出};}

                                      铁铁们,list模拟实现+反向迭代器就到此结束啦,若博主有不好的地方,请指正,欢迎铁铁们留言,请动动你们的手给作者点个鼓励吧,你们的鼓励就是我的动力✨

上一篇:零基础也能轻松掌握!宝塔面板画画入门教程

下一篇:云服务器怎么设置电脑?