C++学习/复习14--list的模拟实现(节点类/迭代器封装成类/list类/测试)

一、节点类

1.匿名对象

**在C++中,匿名对象主要是通过构造函数直接生成的未命名对象实例,通常产生于以下三种情况:将对象作为值传递给函数、进行类型转换以及在函数需要返回一个对象时**。以下是对这三种情况的详细介绍:

1. **传参产生匿名对象**
 在C++中,当以值的方式传递对象给函数时,会直接通过构造函数创建一个临时的匿名对象。这个匿名对象在函数调用结束后就会被销毁。例如,`Cat();` 生成了一个匿名对象,执行完 `Cat( )` 代码后,此匿名对象就此消失。

2. **类型转换产生匿名对象**
  在需要进行类型转换的时候,C++也会创建匿名对象。例如,当把一个类型的对象转换为另一个类型,但又不能直接转换时,就会通过构造函数创建一个匿名对象来完成这一过程。
   - **具体应用案例**:在示例中,`A a = 11;` 实际上就发生了一次类型转换,这里的 `A(11)` 就是一个匿名对象。

3. **返回值产生匿名对象**
 当函数需要返回一个类的对象实例时,也会生成一个匿名对象。这个匿名对象通常是函数内部创建的对象的副本,其生命周期取决于主调函数如何处理返回值

- **函数返回值为对象时**:当函数返回值是一个对象(非引用)的时候,会产生一个匿名对象。 
- **控制台输出时**:在某些情况下,为了方便输出或操作,可以直接创建匿名对象并调用其成员函数。例如,`Student(12, 170).printfInfo();`  

 匿名对象在C++中主要通过构造函数直接生成,且不需要显式指定名称。匿名对象的生命周期通常仅限于创建它的语句执行期间,语句执行完毕后,这些对象会自动销毁。虽然匿名对象为编程带来了便利,但也需要注意其生命周期和作用范围,避免在需要长时间存在的对象上使用匿名对象,以免造成不必要的麻烦或错误。

2.类成员变量与构造函数

T( )是匿名对象,自动调用构造函数生成,在此处作为缺省参数默认值。因为不清楚节点存储的是内置类型还是自定义类型,缺省值不可以随便填0或'0 ',此处用匿名函数值传参会产生一个与要求节点类型相符合的临时变量作为缺省值。

二、迭代器类

 1.常量指针与指针常量

1. **定义**
   - **常量指针**:常量指针主要指的是指针所指向的值是不可变的。例如,`const int *p = &a;` 表明 `p` 是一个指向整型常量的指针,意味着无法通过指针 `p` 来修改 `a` 的值。
   - **指针常量**:指针常量指的是指针本身的值(即指向的地址)是不可变的。例如,`int * const p = &a;` 表明 `p` 是一个指向整型的指针常量,这意味着 `p` 始终指向 `a`,但是可以通过 `p` 修改 `a` 的值。

 2. **语法形式**
   - **常量指针**:`const int *p;` 或 `int const *p;` 都是声明一个指向整型常量的指针。
   - **指针常量**:`int * const p;` 声明一个指向整型的指针常量。

3. **函数传参**
   - **常量指针**:常作为函数参数传递,以确保函数内部不会修改传入的指针指向的值,从而保证数据的完整性。
   - **指针常量**:一般不会用作函数参数传递,因为函数内部通常不需要固定指针的指向地址。

4. **内存管理**
   - **常量指针**:需要注意指向的内存是否可写,以避免写入只读内存导致程序崩溃。
   - **指针常量**:需要确保指向的内存地址在整个生命周期内都有效,避免悬空指针的问题

5. **注意事项**
   - **常量指针**:需要确保不将非const指针赋值给const指针,这会引发编译错误。
   - **指针常量**:初始化后不能再指向其他地址,所以初始化时要特别小心。

针对上述分析,可以考虑以下几点建议:

- 当您需要通过函数传递指针,但又不希望函数内部修改原始数据时,可以使用常量指针。
- 如果某个指针需要始终指向同一个对象,且该对象的值需要能够被不同部分的代码修改,那么使用指针常量可能更合适。

此处用常量指针传参,const控制指向的数据不能改变,此处将const与非const参数均用类模板封装成一个参数Ref和Ptr

2.类成员变量与构造函数

3.访问节点操作

4.节点比较操作

三、list类

1.迭代器与成员变量

2.构造函数

3.拷贝构造与重载=

4.析构函数与链表清除插入函数

注意erase函数后的迭代器失效问题(指针指向被释放的空间)

四、测试

1.输出函数与遍历链表类

2.头尾插入删除

3.定点插入

4.拷贝构造与重载=

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/691349.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【动态规划-BM78 打家劫舍(一)】

题目 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家,就不能再偷第二家;如果偷了第二家&…

AI大模型时代,帆软引领对话式业务分析变革

大数据产业创新服务媒体 ——聚焦数据 改变商业 试想一下,假如用户完全不用懂技术,也不需要懂什么数据分析技巧,就可以随心所欲的进行数据分析,该多好。现在,有一个工具可以实现这个设想,那就是基于大模型…

嵌入式Linux系统编程 — 3.3 chown、fchown 和 lchown 函数更改文件属主

目录 1 文件属主 1.1 文件属主概念 1.2 如何查看文件属主 1.3 有效用户 ID 和有效组 ID 2 chown 函数 2.1 chown命令 2.2 chown函数 2.3 getuid 和 getgid函数 3 fchown函数 3.1 fchown函数简介 3.2 示例代码 4 lchown函数 1 文件属主 1.1 文件属主概念 Linux…

高通SDX12:Voice Over USB 功能调试

一、功能概述及使用环境 Linux PC 作为上位机,内置 SLIC基于高通 SDX12 平台的设备作为从设备,通过USB连接到 Linux PC 上,在 PC 上枚举 UAC 设备从设备进行 MO/MT Call 时,上位机使用 arecord 进行录音,音频数据通过 USB 传至上位机,上位机停止录音后再使用 aplay 进行播…

idea debug时提示”Method breakpoints may dramatically slow down debugging“的解决办法

问题现象 今天同事喊我过去看一个问题,项目正常启动的时候没问题,debug模式就卡住了,很久不动。我推测是哪个断点导致的,一看断点果然有情况。在方法上打了断点。 解决方式(Android Studio一样的解决) 1、View Brea…

责任链模式(行为型)

目录 一、前言 二、责任链模式 三、总结 一、前言 责任链模式(Chain of Responsibility Pattern)也叫职责链模式,是一种行为型设计模式,职责链模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦…

机器学习--损失函数

损失函数(Loss Function),也称为代价函数(Cost Function)或误差函数(Error Function),是机器学习和统计学中的一个重要概念。它用于量化模型预测值与真实值之间的差异。损失函数的值…

毫米波雷达深度学习技术-1.6目标识别2

1.6.4 自动编码器和变体自动编码器 自编码器包括一个编码器神经网络,随后是一个解码器神经网络,其目的是在输出处重建输入数据。自动编码器的设计在网络中施加了一个瓶颈,它鼓励原始输入的压缩表示。通常,自编码器旨在利用数据中的…

Spring boot项目

一. Spring boot 安装地址 https://start.spring.io/ 二. 选择 三. idea配置 找到下载的文件解压缩,打开pom.xml(选择从idea打开)

Shell以及Shell编程

Shell的任务 ①分析命令; ②处理通配符、变量替换、命令替换、重定向、管道和作业控制; ③搜索命令并执行。 内部命令:内嵌在Shell中。 外部命令:存在于磁盘上的独立可执行文件。 #!/bin/bash #! 称为一个幻数&…

【Vue3】理解toRef() 和 toRefs()

历史小剧场 知道可能面对的困难和痛苦,在死亡的恐惧中不断挣扎,却仍然能战胜自己,选择这条道路,这才是真正的勇气。----《明朝那些事儿》 前言 toRef 和 toRefs 是Vue3中的响应式转换工具函数 toRef: 不影响源对象的情况下&#x…

DIO控制卡,IRIG-B码卡,PCI-E总线接口卡,百兆数据采集卡

DIO控制卡 ● 4路继电器输出(5A250VAC) ● 4路开关量输入(24VDC) ● 1路IDE接口 ● 端口浪涌保护 IRIG-B码卡 ● 1路IRIG-B对时接口(RS485/光纤) ● 1路IEEE1588 V2对时接口(RJ45/光纤&#…

Python在股票交易分析中的应用:布林带与K线图的实战回测

引言 在股票交易的世界中,技术分析是投资者们用来预测市场动向的重要工具。布林带(Bollinger Bands)作为一种动态波动范围指标,因其直观性和实用性而广受欢迎。本文将通过Python代码,展示如何使用布林带结合K线图来分…

数据结构之计数排序算法【图文详解】

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 博主主页:LiUEEEEE                        …

【python报错】TypeError: dict.get() takes no keyword arguments

【Python报错】TypeError: dict.get() takes no keyword arguments 在Python中,字典(dict)是一种非常灵活的数据结构,用于存储键值对。dict.get()方法是用来从字典中获取与给定键(key)相关联的值&#xff0…

WordPress网站更换域名后如何重新激活elementor

在创建WordPress网站时,我们常常需要更改域名。但是,在更换域名后,你可能会遇到一个问题:WordPress后台中的Elementor插件授权状态会显示为不匹配。这时,就需要重新激活Elementor插件的授权。下面我会详细说明如何操作…

数据结构之ArrayList与顺序表(下)

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:数据结构(Java版) 目录 ArrayList的具体使用 118. 杨辉三角 扑克洗牌算法 接上篇:数据结构之ArrayLis…

mqtt-emqx:简单安装emqx

安装依赖 yum install -y epel-release libatomic下载 cd /chz/install/emqx wget https://www.emqx.com/en/downloads/broker/5.7.0/emqx-5.7.0-el7-amd64.tar.gz解压 mkdir -p emqx && tar -zxvf emqx-5.7.0-el7-amd64.tar.gz -C emqx后台运行 cd /chz/install/e…

ChatGPT-4o体验demo

OpenAI 最近推出了其最新的人工智能语言模型——GPT-4O。该模型是在原有 GPT-4 的基础上进行优化而成,旨在提升生成质量和响应速度。GPT-4O 采用了更加高效的架构设计,使其在处理复杂文本时表现出更快的速度和更高的准确性。GPT-4O 在训练过程中融入了最…

【每日刷题】Day59

【每日刷题】Day59 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 1103. 分糖果 II - 力扣(LeetCode) 2. 1051. 高度检查器 - 力扣&#xff08…