自己做的网站买域名多少钱/对网站进行seo优化
介绍
上一次介绍了list队容器的迭代器模拟,这次模拟实现list的简单功能,尤其要注意构造函数、析构函数、以及赋值运算符重载的实现。
list容器需要接纳所有类型的数据,因此,结构设置与迭代器设置同理,需要引入结点,数据。
//结点结构
template<class T>
struct ListNode
{
ListNode<T>* _next;
ListNode<T>* _last;
T _data;
ListNode(const T& x = T())
:_next(nullptr)
, _last(nullptr)
, _data(x)
{ }
};//list容器基本元素
template<class T>
class list
{
public:
typedef ListNode<T> Node;
typedef _list_iterator<T> iterator;private:
Node* _node; //此结点为哨兵结点,前指头结点,后指尾结点,里面没有数据
};
一,构造函数
构造函数只需构造“ 哨兵结点 ”即可,因为这里使用链式结构存储,因此构造函数没有顺序结构那样的逻辑。代码如下:
list()
{
_node = new Node;
_node->_last = _node;
_node->_next = _node;
}
拷贝构造的实现可直接运用赋值运算符,这里要注意,由于这里的设计设计到动态空间的申请,所以实现时需进行深拷贝。
这里,我们先实现push_back尾插功能,代码如下:
//尾插功能
void push_back(const T& x = T())
{
Node* node = new Node;
node->_data = x;
node->_next = _node;
node->_last = _node->_last;
_node->_last->_next = node;
_node->_last = node;
}
下面是赋值运算符和拷贝构造的实现,唯一要注意的是在使用赋值运算符前,要先确定“ 哨兵结点 ”,即普通的构造函数。
//赋值运算符重载
list<T>& operator=(list<T>& L)
{
Node* node = (L._node)->_next;
while (node != L._node)
{
push_back(node->_data);
node = node->_next;
}
return *this;
}//拷贝构造函数
list(list<T>& L)
{//哨兵结点的构造
_node = new Node;
_node->_last = _node;
_node->_next = _node;//赋值运算符的使用
*this = L;
}
下面进行样例代码测试:
void test1()
{
list<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
list<int> v2;
v2 = v1;
list<int> v3(v1);
std::cout << "List v2: ";
for (auto e : v2)
{
std::cout << e << " ";
}
std::cout << std::endl;
std::cout << "List v3: ";
for (auto e : v3)
{
std::cout << e << " ";
}
std::cout << std::endl;
}
测试数据结果:
二,析构函数
析构函数的设计只需诼渐释放所有结点即可,包括“ 哨兵结点 ”。代码如下:
~list()
{
Node* t = _node->_next;
while (t != _node)
{
Node* next = t->_next;
delete t;
t = next;
}
delete t; //最后释放哨兵结点
t = nullptr;
}
三,list容器接口
这里实现begin()、end()、push_back(这个接口上面已实现,这里不做演示)、pop_back、push_front、pop_front。代码如下:
iterator begin() //获取头结点
{
return _node->_next;
}
iterator end() //获取尾结点
{
return _node;
}
void pop_back() //尾删
{
assert(_node->_next != _node);
Node* node = _node->_last->_last;
delete _node->_last;
_node->_last = node;
node->_next = _node;
}
void push_front(const T& x = T()) //头插
{
Node* node = new Node;
node->_data = x;
node->_next = _node->_next;
node->_last = _node;
_node->_next->_last = node;
_node->_next = node;
}
void pop_front() //头删
{
assert(_node->_next != _node);
Node* node = _node->_next->_next;
delete _node->_next;
_node->_next = node;
node->_last = _node;
}
list容器常用功能有clear()、swap()、erase、insert。接口参数与实现如下:
void clear()
{
Node* t = _node->_next;
while (t != _node)
{
Node* next = t->_next;
delete t;
t = next;
}
t = nullptr;
}
void swap(list<T>& L)
{
std::swap(_node, L._node);
}
iterator insert(iterator pos, const T& x = T())
{
Node* node = new Node;
node->_data = x;
node->_next = pos.node;
node->_last = (pos.node)->_last;
node->_next->_last = node;
node->_last->_next = node;
return node;
}
iterator erase(iterator pos)
{
assert(pos.node != _node);
Node* next = (pos.node)->_next;
Node* last = (pos.node)->_last;
delete pos.node;
next->_last = last;
last->_next = next;
return next;
}
下面进行样例代码测试:
void test2()
{
list<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
list<int>::iterator it = ++v.begin();
v.insert(it, 9);
v.erase(v.begin());
for (auto e : v)
{
std::cout << e << " ";
}
std::cout << std::endl;
}
测试数据结果如下:
其它细节逻辑可自行测试,这里不再一一演示。
总:list容器的模拟实现跟部分容器可能有些难度,这里注重要注意类型使用和转换,迭代器的模拟以及构造赋值与析构。功能实现的逻辑基本与链式逻辑一样。
相关文章:

【C++】list容器功能模拟实现
介绍 上一次介绍了list队容器的迭代器模拟,这次模拟实现list的简单功能,尤其要注意构造函数、析构函数、以及赋值运算符重载的实现。 list容器需要接纳所有类型的数据,因此,结构设置与迭代器设置同理,需要引入结点&…...

linux 安装ffmpeg
一、下载 ffmpeg-4.3.1 下载地址:链接:https://pan.baidu.com/s/1xbkpHDfIWSCbHFGJJHSQcA 提取码:3eil 二、上传到服务器root目录下 三、给ffmpeg-4.3.1 读写权限 chmod -R 777 /root/ffmpeg-4.3.1 四、创建软连接 1.进入/bin 目录 2.…...

激光雷达行业梳理2-产业链、公司、未来展望
四、产业链及竞争格局 激光雷达产业链可以分为上游(光学和电子元器件)、中游(集成激光雷达)、下游(不同应用场景)。其中 上游即激光发射、激光接收、扫描系统和信息处理四大部分,主要包括激光器…...

Java 设计者模式以及与Spring关系(四) 代理模式
目录 简介: 23设计者模式以及重点模式 代理模式(Proxy Pattern) 静态代理示例 spring中应用 动态代理 1.基于JDK的动态代理 target.getClass().getInterfaces()作用 内名内部类写法(更简洁,但不推荐) 2.基于CGLIB实现 spring中应用 …...

PHP编程实践:实际商品价格数据采集
引言 在电子商务领域,对商品价格进行数据采集和对比是一项常见的需求。本文将介绍如何使用PHP编程语言实现对1688和淘宝商品价格数据的采集和对比,帮助读者了解实际的编程实践过程。 一、数据采集原理 数据采集是指从互联网上获取数据的过程ÿ…...

有效防范网络风险的关键措施
在数字化时代,企业面临着日益复杂和频繁的网络风险。提高员工的网络安全意识是防范网络威胁的关键一步。本文将探讨企业在提升网络安全意识方面可以采取的措施,以有效预防潜在的网络风险。 1. 开展网络安全培训:企业应定期组织网络安全培训&…...

Spring Boot整合webservice
Spring Boot整合webservice 前言1.整合依赖2.建立暴露接口2.实现类 3.发布服务4.查看打完收工! 前言 工作中遇到的问题,由于下游系统属于第三方系统,使用的是soap webservice,同时也在开发,虽然也发布了一套webservic…...

Qt拖拽事件简单实现
1.相关说明 重写resizeEvent(这个按需重写)、dragEnterEvent(拖拽事件函数)、dropEvent(放下事件函数),可以将本地图片拖拽到label标签中 2.相关界面 3.相关代码 #include "widget.h" #include "ui_widget.h" #include <QDragEnterEvent>…...

上门回收小程序,打造回收新模式
近年来,我国一直秉持着环保绿色的发展理念,为了减少资源浪费,旧物回收成为了人们处理废弃物品的方式。目前,我国回收市场规模大约能达到3.58亿元,在我国经济的稳定增长和环保意识的提高下,回收市场规模还将…...

unity项目《样板间展示》开发:火焰和UI设计
第二章:火焰和UI设计 前言一、火焰模型管理灶台火焰壁炉火焰 二、电视机播放三、UI设计结语 前言 这次带大家从0到1做一个unity项目:《样板间展示》。 顾名思义,项目内容是展示样板间,即玩家可以与房间中的物体、家具进行交互。 至…...

即插即用篇 | UniRepLKNet:用于音频、视频、点云、时间序列和图像识别的通用感知大卷积神经网络 | DRepConv
大卷积神经网络(ConvNets)近来受到了广泛研究关注,但存在两个未解决且需要进一步研究的关键问题。1)现有大卷积神经网络的架构主要遵循传统ConvNets或变压器的设计原则,而针对大卷积神经网络的架构设计仍未得到解决。2)随着变压器在多个领域的主导地位,有待研究ConvNets…...

MPU6050传感器—姿态检测
本节主要介绍以下内容: 姿态检测的基本概念 姿态传感器的工作原理及参数 MPU6050传感器介绍 实验:获取MPU6050原始数据 实验:移植官方DMP例程 一、姿态检测基本概念 1.1 姿态 在飞行器中,飞机姿态是非常重要的参数&#x…...

PaddleOCR封装,在线服务化部署实战(python部署,超新手教程)
OCR,即光学字符识别(Optical Character Recognition),是一种将图像中的文字转换为机器编码文字的技术。这种技术可以识别和转换各种来源的文本,包括扫描文档、照片中的文字、手写笔记等。光学字符识别(OCR&…...

采集B站up主视频信息
一、网页信息(示例网址:https://space.bilibili.com/3493110839511225/video) 二、查看响应数据 三、查看数据包内容 四、相关代码(代码内容未进行翻页爬取) # Time: 2024/1/19 16:42 # Author: 马龙强 # File: 采集B…...

Laykefu客服系统 任意文件上传漏洞复现
0x01 产品简介 Laykefu 是一款基于workerman+gatawayworker+thinkphp5搭建的全功能webim客服系统,旨在帮助企业有效管理和提供优质的客户服务。 0x02 漏洞概述 Laykefu客服系统/admin/users/upavatar.html接口处存在文件上传漏洞,而且当请求中Cookie中的”user_name“不为…...

《幻兽帕鲁》服务器该如何选购
幻兽帕鲁作为目前火爆的一款游戏,幻兽帕鲁的服务器要能够承受其强大的力量和能力,需要具备一定的配置和性能。因此针对<幻兽帕鲁>这款游戏我们来总结一些可能用于承载幻兽帕鲁的服务器类型: 高性能服务器:幻兽帕鲁的能力强大,可能需要…...

比较有创意的网站
有创意的网站通常展示了独特的设计、交互或内容。以下是一些备受赞誉的有创意的网站,你可以参考: Awwwards: Awwwards 是一个评选并展示全球最优秀网站的平台。你可以在这里找到很多有创意的网站设计。 Awwwards CSS Design Awards: 类似于Awwwards&…...

alfred自定义谷歌翻译workflow
如果要实现自定义workflow,则必须安装付费版的alfred,囊中羞涩的话可以自行淘宝。自定义步骤如下: 1. 新建空的workflow,填写基本信息 2. 开发python脚本 打开该workflow所在目录,进行下面步骤: 首先安装…...

【网络安全 -> 防御与保护】专栏文章索引
为了方便 快速定位 和 便于文章间的相互引用等 作为一个快速准确的导航工具 网络安全——防御与保护 (一).信息安全概述 (二).防火墙组网...

用户资源(菜单)控制学习使用
效果图 第一步 需要再定义常量资源 //信访听证 资源前缀public static final String RESPREFIX_MODULE_XINFTZ_"module_xinftz_";//听证专家库public static final ConstantItem RES_MODULE_XINFTZ_TINGZZJK new ConstantItem(RESPREFIX_MODULE_XINFTZ_ "tin…...

邦芒支招:十大秘诀助你轻松进名企
找到一份理想的工作是大学毕业生们最大的心愿,而进入那些知名的大企业更是广大毕业生的梦想。如何应付这些企业的面试成为了毕业生们最为关注的话题。 这些名企的面试往往有一定的程序,绝非草草而就。因此,一定要有所准备才能“百战不殆”。而要在面试前得到有关信息,常常采用…...

5G_射频测试_参考规范(一)
参考规范: • Base Station (BS) conformance testing(重点limitation)Directory Listing /ftp/Specs/archive/38_series/38.104 (3gpp.org) • Conducted conformance testing(传导测试)3GPP 38.141-1 6.7 Tran…...

幻读是什么,用什么隔离级别可以防止幻读?
幻读指的是,在同一个事务中,以同样的条件执行的两次查询,第二次查询查到了第一次查询所没查到的数据。 在mysql的四种隔离级别中,可重复读和串行化两种隔离级别没有幻读问题。那么它们是如何解决幻读问题的呢? 先说串行…...

UE5 C++学习笔记 FString FName FText相互转换
1.FString 是UE里的String。最接近std::string, 唯一可以修改的字符串类型。性能更低 TEXT(string) TEXT宏,作用是将字符串转换成Unicode,切记UE中使用字符串输出要使用该宏 2. FName 是UE里特有的类型。它更注重于表示名称不区分大小写,不…...

【ASOC全解析(三)】machine原理和实战
【ASOC全解析(三)】machine原理和实战 一、machine概述与原理1.1 machine的主要职责1.2 本文的主要内容 二、machine程序示例完整的machine驱动代码示例扩展知识:SND_SOC_DAILINK_DEFS使用方法说明总结与其它说明 /*************************…...

matlab appdesigner系列-常用15-滑块、微调器
滑块,以左右拖动的方式在一定范围内改变数值 此示例,滑块显示微调器的数值,微调器也可以显示滑块的数值 操作步骤为: 1)将滑块和微调器拖拽到画布上 2)分别设置这两个组件的回调函数 回调函数有两个选项…...

google翻译相机报错 请安装最新的Google应用,以便使用相机翻译功能
修复:google翻译相机报错 背景:解决方法 背景: 国内手机使用google翻译的相机时报错: 请安装最新的Google应用,以便使用相机翻译功能点击报错的“确定”后转到了国内空白的软件商店页面 解决方法 Google Play搜索 …...

openssl3.2/test/certs - 015 - Primary intermediate ca: ca-cert
文章目录 openssl3.2/test/certs - 015 - Primary intermediate ca: ca-cert概述笔记END openssl3.2/test/certs - 015 - Primary intermediate ca: ca-cert 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 这个例子有不同的地方, 发证书时, 指定了CA. 看实验注释, 是…...

linux中用户及用户组信息
1,linux通过用户名和口令来验证用户的身份。 2,几个用户可以组成一个用户组。 3,useradd工具添加用户,groupadd命令添加用户组。 4,history 命令查看用户在Shell中执行命令的历史记录。 5,userdel命令删…...

用Go plan9汇编实现斐波那契数列计算
斐波那契数列是一个满足递推关系的数列,如:1 1 2 3 5 8 ... 其前两项为1,第3项开始,每一项都是其前两项之和。 用Go实现一个简单的斐波那契计算逻辑 func fib(n int) int {if n 1 || n 2 {return 1}return fib(n-1) fib(n-2) …...