4.模板-数组类封装

文章目录

    • 功能
    • 代码
    • 运行结果

功能

利用模板进行数组类封装,在代码实现过程中,使用了
1.operator=重载,利用深拷贝防止浅拷贝问题;
2.operator[]重载,确保可以使用[]来仿真数组元素;
3.尾插法、尾删法、返回数组容量和数组大小;

代码

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>using namespace std;template<class T>
class MyArray
{
public:/*有参构造*/MyArray(int capacity){/*cout << "构造" << endl;*/this->m_Capacity = capacity;this->m_size = 0;this->pAddress = new T[this->m_Capacity];}/*拷贝构造*/MyArray(const MyArray &arr){/*cout << "拷贝构造" << endl;*/this->m_Capacity = arr.m_Capacity;this->m_size = arr.m_size;/*深拷贝*/this->pAddress = new T[arr.m_Capacity];/*将arr中的数据拷贝过来*/for (int i = 0; i < this->m_size; i++){this->pAddress[i] = arr.pAddress[i];}}/*operator= 防止浅拷贝问题*/MyArray& operator=(const MyArray& arr){/*cout << "operator=调用" << endl;*//*先判断原来堆区是否有数据,如果有先释放*/if (this->pAddress != NULL){delete[] this->pAddress;this->pAddress = NULL;this->m_Capacity = 0;this->m_size = 0;}/*深拷贝*/this->m_Capacity = arr.m_Capacity;this->m_size = arr.m_size;this->pAddress = new T[arr.m_Capacity];for (int i = 0; i < this->m_size; i++){this->pAddress[i] = arr.pAddress[i];}return *this;}/*尾插法*/void Push_Back(const T &val){/*判断容量是否等于大小*/if (this->m_Capacity == this->m_size){cout << "容量等于元素个数" << endl;return;}this->pAddress[this->m_size] = val;/*在数据末尾插入数据*/this->m_size++;/*更新数组大小*/}/*尾删法*/void Pop_Back(){/*让用户访问不到最后一个元素,即为尾删,逻辑删除*/if (this->m_size == 0){cout << "元素个数为0,不执行尾删!" << endl;}this->m_size--;}/*通过下标方式访问数组中的元素*/T& operator[](int index){return this->pAddress[index];}/*返回数组容量*/int GetCapaCity(){return this->m_Capacity;}/*返回数组大小*/int GetSize(){return this->m_size;}/*析构函数*/~MyArray(){/*cout << "析构" << endl;*/if (this->pAddress != NULL){delete[] this->pAddress;this->pAddress = NULL;}}private:T* pAddress;int m_Capacity;int m_size;
};void printMyArray(MyArray<int> &arr)
{/*使用了arr.GetSize()*/for (int i = 0; i < arr.GetSize(); i++){/*使用了[]重载*/cout << arr[i] << " ";}cout << endl;
}void test01()
{MyArray<int>arr1(10);/*利用尾插法向数组中插入数据*/for (int i = 0; i < 5; i++){arr1.Push_Back(i);}cout << "arr1中的数据打印:";printMyArray(arr1);cout << "arr1的容量: " << arr1.GetCapaCity() << endl;cout << "arr1的大小: " << arr1.GetSize() << endl;/*利用拷贝构造*/MyArray<int>arr2(arr1);cout << "--------------------" << endl;cout << "arr2中的数据打印:";printMyArray(arr2);cout << "arr2的容量: " << arr2.GetCapaCity() << endl;cout << "arr2的大小: " << arr2.GetSize() << endl;cout << "arr2尾删后的数据打印 ";arr2.Pop_Back();printMyArray(arr2);return;
}int main()
{test01();return 0;
}

运行结果

在这里插入图片描述

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

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

相关文章

PyTorch深度学习

一、深度学习的概念 如上所示&#xff0c;人工智能包含了机器学习和深度学习&#xff0c;其中深度学习是机器学习的一种特殊的学习方法&#xff0c;人工智能的核心是深度学习 1、深度学习 深度学习需要用到大量的神经网络构建和运算模块&#xff0c;故出现了很多的深度学习框…

Unity 窗口化设置

在Unity中要实现窗口化&#xff0c;具体设置如下&#xff1a; 在编辑器中&#xff0c;选择File -> Build Settings。在Player Settings中&#xff0c;找到Resolution and Presentation部分。取消勾选"Fullscreen Mode"&#xff0c;并选择"Windowed"。设…

数据库的横表和竖表

先来看个图: 定义如下&#xff1a; 横表&#xff1a;在一行数据中包含了所有的属性&#xff0c;一行就代表了一个完整的实体 竖表&#xff1a;在一行中只存储一个实体的一个属性&#xff0c;多个行组合在一起才组成一个完整的属性适用场景&#xff1a; 横表&#xff1a;对查…

(C++笔试题)选择题+编程题

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 选择题 第一道 下面对析构函数的正确描述是&#xff08;&#xff09; A. 系统不能提供默认的析构函数B. 析构函数必须由用户定义C. 析构函数没有参数D. 析构函数可以设置默认参数 解析&#xff1a; 正确描述析构函数的…

WebPack的使用及属性配、打包资源

WebPack(静态模块打包工具)(webpack默认只识别js和json内容) WebPack的作用 把静态模块内容压缩、整合、转译等&#xff08;前端工程化&#xff09; 1️⃣把less/sass转成css代码 2️⃣把ES6降级成ES5 3️⃣支持多种模块文件类型&#xff0c;多种模块标准语法 export、export…

GESP Python编程二级认证真题 2024年3月

Python 二级 2024 年 03 月 1 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 小杨的父母最近刚刚给他买了一块华为手表&#xff0c;他说手表上跑的是鸿蒙&#xff0c;这个鸿蒙是&#xff1f;&#xff08; &#xff09; A. 小程序 B. 计时器 C. 操作系统…

Stable Diffusion之核心基础知识和网络结构解析

Stable Diffusion核心基础知识和网络结构解析 一. Stable Diffusion核心基础知识1.1 Stable Diffusion模型工作流程1. 文生图(txt2img)2. 图生图3. 图像优化模块 1.2 Stable Diffusion模型核心基础原理1. 扩散模型的基本原理2. 前向扩散过程详解3. 反向扩散过程详解4. 引入Late…

Java_20 元素和最小的山形三元组

元素和最小的山形三元组 给你一个下标从 0 开始的整数数组 nums 。 如果下标三元组 (i, j, k) 满足下述全部条件&#xff0c;则认为它是一个 山形三元组 &#xff1a; i < j < knums[i] < nums[j] 且 nums[k] < nums[j] 请你找出 nums 中 元素和最小 的山形三元…

【如何解决一些常见的 Composer 错误的保姆级讲解】

&#x1f308;个人主页:程序员不想敲代码啊&#x1f308; &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f3c6; &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提…

ABAP AMDP 示例

AMDP 是HANA开发中的一种优化模式 按SAP的官方建议&#xff0c;在可以使用Open SQL实现需要的功能或优化目标的时候&#xff0c;不建议使用AMDP。而在需要使用Open SQL不支持的特性&#xff0c;或者是大量处理流和分析导致了数据库和应用服务器之间有重复的大量数据传输的情况…

SiameseRPN原理详解(个人学习笔记)

参考资源&#xff1a; 视觉目标跟踪SiamRPNSiameseRPN详解CVPR2018视觉目标跟踪之 SiameseRPN 目录&#xff09; 1. 模型架构1.1 Siamese Network1.2 RPN 2. 模型训练2.1 损失函数2.2 端到端训练2.3 正负样本选择 3. 跟踪阶段总结 SiamRPN是在SiamFC的基础上进行改进而得到的一…

开源,微信小程序-超级计算器T3000 简介

笔者于四年前自学微信小程序开发&#xff0c;这个超级计算器T3000就是当时的练习作品。超级计算器T3000的功能有很多&#xff0c;其中的核心技术是矩阵计算&#xff0c;使用的工具库是math.js&#xff0c;其次是复杂运算和分式运算。关于math.js的使用&#xff0c;可以参考另一…

基于springboot的船舶维保管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

Kibana操作Elasticsearch教程

文章目录 简介ES文档操作创建索引查看索引创建映射字段查看映射关系字段属性详解typeindexstore 字段映射设置流程 新增数据新增会随机生成id新增自定义id智能判断 修改数据删除数据查询基本查询查询所有&#xff08;match_all&#xff09;匹配查询多字段查询词条匹配多词条精确…

可望而不可即的“人文关怀”

死亡既然是最后的归宿&#xff0c;生命的必然&#xff0c;自然也就没有必要过多地害怕了。一切顺其自然&#xff0c;交给“命运”就是了。 我参观过英国的临终关怀医院&#xff0c;这是世界上最早的一所临终关怀医院&#xff0c;已有100多年历史。 那里的大多数病人都只剩一个…

沃通国密SSL根证书入根赢达信国密浏览器

近日&#xff0c;沃通CA国密SSL根证书正式入根赢达信国密安全浏览器&#xff0c;携手推动国产密码技术应用、完善国密应用生态体系&#xff0c;也标志着沃通国密SSL证书兼容性再次得到提升&#xff0c;进一步夯实国密应用根基。 密码算法的安全性是信息安全保障的核心&#xff…

ethers.js:sign(签名)

Signers 在ethers中Signer是以太坊账户的抽象&#xff0c;可以用来签名消息和交易&#xff0c;如将签名的交易发送到以太坊网络以执行状态更改的操作。 npm install ethers5.4.0// 引入 import { ethers } from ethers签名 this.provider new ethers.providers.Web3Provider(…

数据库系统概论(超详解!!!) 第四节 关系数据库标准语言SQL(Ⅱ)

1.数据查询 SELECT [ ALL | DISTINCT] <目标列表达式>[&#xff0c;<目标列表达式>] … FROM <表名或视图名>[&#xff0c; <表名或视图名> ] … [ WHERE <条件表达式> ] [ GROUP BY <列名1> [ HAVING <条件表达式> ] ] [ ORDER BY…

设计模式——结构型——外观模式Facade

处理器类 public class Cpu {public void start() {System.out.println("处理器启动了...");} } 内存类 public class Memory {public void start() {System.out.println("内存启动了...");} } 硬盘类 public class Disk {public void start() {Syste…

主流公链 - Monero

Monero: 加密货币的隐私标杆 1. 简介 Monero&#xff08;XMR&#xff09;&#xff0c;世界语中货币的意思&#xff0c;是一种去中心化的加密货币&#xff0c;旨在提供隐私和匿名性。与比特币等公开区块链不同&#xff0c;Monero专注于隐私保护&#xff0c;使用户的交易记录和余…