欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > C++学习/复习18----迭代器/反向迭代器及在list/vector中的应用、list与vector模拟实现复习

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

2024/11/30 12:42:39 来源:https://blog.csdn.net/Hncj2022/article/details/139954944  浏览:    关键词: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:反向迭代器

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com