C++从零开始的打怪升级之路(day33)

这是关于一个普通双非本科大一学生的C++的学习记录贴

在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料

那么开启正题

今天分享的是关于list的模拟实现,今天收尾,明天开始stack和queue

1.insert函数

void insert(iterator pos, const T& x)
{Node* cur = pos._node;Node* prev = cur->_prev;Node* newnode = new Node(x);newnode->_next = cur;newnode->_prev = prev;prev->_next = newnode;cur->_prev = newnode;
}

实现insert函数后,再实现push_back(),push_front(),直接复用即可

void push_front(const T& x)
{insert(begin(), x);
}void push_back(const T& x)
{insert(end(),x);/*Node* tail = _head->_prev;Node* newnode = new Node(x);newnode->_next = _head;newnode->_prev = tail;tail->_next = newnode;_head->_prev = newnode;*/
}

2.erase函数

void erase(iterator pos)
{assert(pos != end());Node* prev = pos._node->_prev;Node* next = pos._node->_next;delete pos._node;prev->_next = next;next->_prev = prev;
}

erase函数实现时要注意释放空间,否则会导致内存泄漏

同样的,pop_back(),pop_front(),都复用实现

void pop_back()
{erase(--end());
}void pop_front()
{erase(begin());
}

3.clear函数与析构函数

实现erase函数后clear与析构函数复用实现就很便捷快速了

~list()
{clear();delete[] _head;_head = nullptr;
}void clear()
{iterator it = begin();while (it != end()){erase(it++);}
}

注意这里的erase(it++)不能分开写,会导师迭代器失效

4.拷贝构造函数

list(const list<T>& l)
{_head = new Node;_head->_next = _head;_head->_prev = _head;/*const_iterator it = l.begin();while (it != l.end()){push_back(*it);++it;}*/for (auto e : l){push_back(e);}
}

由于涉及到内存管理,拷贝构造函数必须是深拷贝,这里我们用了两种写法,一种是迭代器,一种是范围for

5.赋值运算符重载

list<T>& operator=(const list<T>& l)
{if (this != &l){clear();for (auto e : l)push_back(e);}return *this;
}

上面是一般写法,当然也有现代写法,如下

list<T>& operator=(list<T> l)
{/*if (this != &l){clear();for (auto e : l)push_back(e);}return *this;*/swap(_head, l._head);return *this;
}

相比之下,现代写法要简洁得多

6.迭代器失效

list的insert不会使迭代器失效,而erase会,迭代器失效的本质是迭代器空间被释放无法访问,所以vector的某些函数造成迭代器失效与list并无太大关联

7.比较vector与list

vector是一个可动态增长的数组

优点:随机访问,很好的支持了排序,二分查找,堆算法等

缺点:头部或中间的插入删除效率低,空间不够增容代价大

lsit是一个带头双向循环的链表

优点:任意位置插入删除数据效率高

缺点:不支持随机访问

总结:vector和list是两个相辅相成,互补的容器

新手写博客,有不对的位置希望大佬们能够指出,也谢谢大家能看到这里,让我们一起学习进步吧!! 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K8s环境下rook-v1.13.3部署Ceph-v18.2.1集群

文章目录 1.K8s环境搭建2.Ceph集群部署2.1 部署Rook Operator2.2 镜像准备2.3 配置节点角色2.4 部署operator2.5 部署Ceph集群2.6 强制删除命名空间2.7 验证集群 3.Ceph界面 1.K8s环境搭建 参考&#xff1a;CentOS7搭建k8s-v1.28.6集群详情&#xff0c;把K8s集群完成搭建&…

基于高通滤波器的ECG信号滤波及心率统计matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 ECG信号简介 4.2 高通滤波器原理 4.3 心率统计 5.完整工程文件 1.课题概述 通过高通滤波器对ECG信号进行滤波&#xff0c;然后再统计其心率。 2.系统仿真结果 3.核心程序与模型 版本&#xff1a…

如何用DT浏览器建立视频播放系统

在DT浏览器官方网站下载最新版软件&#xff0c;安装&#xff0c;在DT浏览器首页点视频直播&#xff0c;软件会自动检测手机相册里的视频并且显示出来&#xff0c;选择需要播放的视频在直播间里播放。如果要建立节目单&#xff0c;需要在服务器上把播放顺序&#xff0c;视频名称…

【Iceberg学习三】Reporting和Partitioning原理

Metrics Reporting Type of Reports 从 1.1.0 版本开始&#xff0c;Iceberg 支持 MetricsReporter 和 MetricsReport API。这两个 API 允许表达不同的度量报告&#xff0c;并支持一种可插拔的方式来报告这些报告。 ScanReport&#xff08;扫描报告&#xff09; 扫描报告&am…

视觉未来:从图像读取到高级处理的计算机视觉精粹

1.计算机视觉 计算机视觉是一门集多学科知识于一体的领域&#xff0c;旨在赋予计算机处理和理解来自现实世界的视觉信息的能力。这涉及从图像或视频中提取数据&#xff0c;并利用这些数据来做出决策或增强人类的理解。计算机视觉的核心挑战是如何使计算机通过视觉感知来理解复…

算法——前缀和算法

1. 什么是前缀和算法 前缀和算法&#xff08;Prefix Sum&#xff09;是一种用于快速计算数组元素之和的技术。它通过预先计算数组中每个位置前所有元素的累加和&#xff0c;将这些部分和存储在一个新的数组中&#xff0c;从而在需要计算某个区间的和时&#xff0c;可以通过简单…

Mockito测试框架中的方法详解

这里写目录标题 第一章、模拟对象1.1&#xff09;①mock()方法&#xff1a;1.2&#xff09;②spy()方法&#xff1a; 第二章、模拟对象行为2.1&#xff09;模拟方法调用①when()方法 2.2&#xff09;模拟返回值②thenReturn(要返回的值)③doReturn() 2.3&#xff09;模拟并替换…

springboot-web服务迁移Kubernetes

1、搞定基础镜像 docker pull openjdk:8-jre-alpine docker tag openjdk:8-jre-alpine 10.204.82.15/kubernetes/openjdk:8-jre-alpine docker push 10.204.82.15/kubernetes/openjdk:8-jre-alpine 2、springboot-web应用服务打包 3、编写Dockerfile构建镜像 FROM 10.204.82.…

深入了解CMSIS:ARM Cortex微控制器软件接口标准介绍

CMSIS (Cortex Microcontroller Software Interface Standard) 是ARM公司提供的一套规范和接口&#xff0c;旨在为Cortex-M系列微控制器提供一致的软件接口&#xff0c;以提高开发效率和可移植性。本文将深入介绍CMSIS的各个部分和功能&#xff0c;并解释其在嵌入式系统开发中的…

Elasticsearch 中的索引的分区(Shards)和副本(Replicas)的使用

Elasticsearch是一个高性能的、分布式的搜索与数据分析引擎&#xff0c;广泛用于全文搜索、结构化搜索、分析以及这三者的组合场景。在Elasticsearch中&#xff0c;“索引”&#xff08;Index&#xff09;是其最基本的数据管理单位&#xff0c;可以类比为传统关系数据库中的“数…

Affinity Photo值不值得买 Affinity Photo多少钱

照片编辑软件在设计师和摄影爱好者中都扮演着重要的角色&#xff0c;而Affinity Photo作为一款备受赞誉的专业级照片编辑软件&#xff0c;值不值得购买呢&#xff1f;Affinity Photo多少钱&#xff1f;下面我们将从多个方面来评估其价值。 一、Affinity Photo值不值得买&#x…

利用CMSIS-RTOS实现多任务调度和同步

在嵌入式系统中&#xff0c;多任务调度和同步对于实现复杂的应用程序非常重要。CMSIS-RTOS是一套针对嵌入式系统的操作系统接口规范&#xff0c;它定义了一组API函数&#xff0c;可用于在嵌入式系统上实现任务调度、同步和通信等功能。本文将介绍如何利用CMSIS-RTOS实现多任务调…

Redis分布式锁的使用案例

一、引入依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.5.0</version> </dependency> 二、工具类 package com.hl.redisdemo.util;import redis.clients.jedi…

学习Android的第四天

目录 Android FrameLayout ( 帧布局 ) FrameLayout size 大小 FrameLayout 属性 Android GridLayout ( 网格布局 ) GridLayout 属性 计算器布局 Android AbsoluteLayout 绝对布局 AbsoluteLayout 四大控制属性 Android FrameLayout ( 帧布局 ) FrameLayout 是 Android…

K210开发板开箱介绍

一、正面有一个电容触摸屏 二、左上角是一个Type-C接口&#xff0c;可用来供电以及下载程序 三、右上角是一个三向的拨动开关&#xff0c;分别是向左、向右、向下三个通道 四、右侧这个是复位按键 五、这部分是wifi模块的一个串口以及按键 六、wifi模块在开发板的背面&#xff…

北斗导航 | 接收机自主完好性监测算法研究成果及研究团队介绍

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 近年来,接收机自主完好性监测(Receiver Autonomous Integrity Monito…

板块零 IDEA编译器基础:第三节 下载和在IDEA中集成 Tomcat服务器 来自【汤米尼克的JAVAEE全套教程专栏】

板块零 IDEA编译器基础&#xff1a;第三节 下载和在IDEA中集成 Tomcat服务器 一、为什么选择Tomcat&#xff08;1&#xff09;常见的JAVA WEB服务器&#xff08;2&#xff09;选择Tomcat的理由 二、Tomcat 8.5下载解压三、Tomcat 结构目录四、在IDEA中集成Tomcat 假设我们已经…

day06-Flex布局

01-标准流 标准流也叫文档流&#xff0c;指的是标签在页面中默认的排布规则&#xff0c;例如&#xff1a;块元素独占一行&#xff0c;行内元素可以一行显示多个。 02-浮动 基本使用 作用&#xff1a;让块元素水平排列。 属性名&#xff1a;float 属性值 left&#xff1a;左…

【element-ui】el-select下拉框el-date-picker弹出框定位问题解决方案

问题描述&#xff1a; 项目开发过程中发现el-select和el-date-picker弹出框显示时候&#xff0c;滚动屏幕&#xff0c;导致弹出框定位出现问题。 首先考虑到看一下element-ui官网提供的api&#xff0c;如下图 1、select提供了popper-append-to-body属性的配置 代码如下&#x…

VoIP之主备注册服务器机制

在IP话机的实际使用中&#xff0c;不可避免的会出现服务器离线运维、服务宕机、IP话机和服务器连接中断等情况。为了保证电话服务的连续性&#xff0c;在VoIP部署服环境中必须有冗余机制。常见的冗余机制以主备服务器的形式实现。 一、主备机制原理 话机正常情况下注册在主服…