• C++学习/复习18----迭代器/反向迭代器及在list/vector中的应用、list与vector模拟实现复习


    迭代器是一个对象,可以循环访问 C++ 标准库容器中的元素,并提供对各个元素的访问。 C++ 标准库容器全都提供迭代器,以便算法可以采用标准方式访问其元素,而不必考虑用于存储元素的容器类型。

    一、反向迭代器类

    基于普通迭代器构建反向迭代器

    基本功能:*   ->  ++  --   !=  构造函数

    注意事项:迭代器返回值不同需要的模板参数不同

    二、List中的应用

    节点类

    节点是组成链表的基本单位

    基本参数:节点类型前后指针、存储的数据

    基本功能:构造函数

    注意事项1:指针类型为节点类型

    注意事项2:数据类型为T,T可能为一个较大的自定义类型,传参时调用其构造函数构造一个匿名对象作为默认的缺省参数,此处认为内置类型也有构造/拷贝构函数,T为内置类型时也可以使用。

    List迭代器类

    基本功能:*  ->   前后置++   前后置--  !=  ==   构造函数

    基本参数:节点类型指针(迭代器本质可看为一个指针)

    注意事项1:成员函数基于链表中的节点指针实现

    注意事项2:前置是加加/减减再返回改变的迭代器、后置是返回原来的迭代器再加加/减减,局部变量不可引用返回,函数参数不同才可引起重载

    注意事项3:此处模板化可解决返回值类型不同(值返回/地址返回、const/非const的问题)

    List类

    基本参数:节点类对象

    基本功能1:正反迭代器(begin,end,rbegin,rend)

    注意事项:_head为头节点非第一个存储数据节点,作为带头双向链表的尾节点

    基本功能2:构造函数与初始化函数与new

    基本功能3:拷贝构造函数、赋值函数与swap函数 

    注意事项:值传递是把对象的拷贝而不是本身传递给函数,函数中对参数对象的任何修改都不会影响调用该函数的对象本身;

    注意事项:重载的赋值函数有引用类型返回值是为了=操作符可以连续使用

    基本功能4:析构函数与clear函数、delete

    基本功能5:链表头插尾插、头删尾删

    基本功能6:insert与erase

    注意事项:要返回新节点或删除节点后的迭代器防止迭代器失效,对于链表型数据结构,比如list,使用了不连续分配的内存,删除运算使指向删除位置的迭代器失效,但是不会失效其他迭代器

    功能7:输出链表,依据迭代器实现

    测试1:改变链表中的数据 

    测试2:自定义类型链表

    测试3:强化for()循环

    测试4:insert

    测试5:erase

    测试6:拷贝构造与赋值

    测试7:反向迭代器

    三、vector中的应用

    基本功能1:反向迭代器(rebegin=end,rend=begin)

    基本功能2:构造函数

    基本功能3:拷贝构造函数与swap与赋值函数

    注意事项:T可能为自定义数据类型,缺省函数传参时以T()形式调用构造函数创建匿名对象作为默认参数

    注意事项:对于vector容器要考虑reserve扩容

    注意事项:重载的赋值函数有引用类型返回值是为了=操作符可以连续使用

    基本功能4:析构函数与delete

    基本功能5:size与capacity

    注意事项:指针相减得到的是两个指针之间相隔的元素个数

    注意事项:size是有效数据个数,capacity是vector当前可用的总容积

    注意事项:扩容时用for循环的方式将原区域的数据复制到新空间

    注意事项:resize在扩容基础上还会在空白区域初始化填上默认数据

    基本功能6:尾插尾删

    基本功能7:随机存取

    注意事项:vector支持随机存取,此处const修饰this指针实现只读与读写模式

    基本功能8:insert与erase

    注意事项:vector的insert考虑位置是否合理,考虑是否需要扩容

    注意事项:erase要考虑位置是否合理

    注意事项:要返回迭代器防止迭代器失效

    基本参数:三个iterator对象维护数组的数据开头数据结尾以及空间结尾

    测试1:数组数据读取

    测试2:insert

    测试3:insert

    测试4:erase

    测试5:vector与string与拷贝构造

    测试6:vector与char

    测试7:vector实现杨辉三角

    测试8:反向迭代器

  • 相关阅读:
    windows安装nginx
    家电翻页电子画册制作秘籍,轻松打造炫酷电子书!
    静态代码块Vs构造代码块
    C++常量
    智慧驿站:为城市带来全新智慧公厕未来形态
    GBase 8c 函数/存储过程定义
    如何使UI自动化项目成功?
    机器人仓库搬砖
    SpringBoot项目中使用MultipartFile来上传文件(包含多文件)
    Tomcat服务部署、优化及多实例实验(Nginx+Tomcat负载均衡、动静分离)
  • 原文地址:https://blog.csdn.net/Hncj2022/article/details/139954944