数组类模板(类模拟实现静态数组)

目录

介绍:

案例描述:

思路:

对要求分别分析实现:

创建对应的类:

1.定义一个数组类

2.类中属性有:数组, 容量, 大小

3.数组函数有:

构造函数(容量)

拷贝构造---->operator=(重载 = )

尾插法

尾删法

获取数组容量

 获取数组大小

析构函数

总代码:

效果展示:



介绍:

该篇文章是模仿静态数组的类,也就是简单数组,不可扩容

案例描述:


实现一个通用的数组类,要求如下:
1.可以对内置数据类型以及自定义数据类型的数据进行存储
2.将数组中的数据存储到堆区
3.构造函数中可以传入数组的容量
4.提供对应的拷贝构造函数以及 operator =防止浅拷贝问题
5.提供尾插法和尾刷法对数组中的数据进行增加和删除
6.可以通过下标的方式访问数组中的元素
7.可以获取数组中当前元素个数和数组的容量 


思路:

对要求分别分析实现:

1.可以对内置数据类型以及自定义数据类型的数据进行存储 ------ 将数组的数据类型设置为elemtype 
2.将数组中的数据存储到堆区 ----- new
3.构造函数中可以传入数组的容量 ---- 构造函数
4.提供对应的拷贝构造函数以及 operator =防止浅拷贝问题 ----- 重载=
5.提供尾插法和尾刷法对数组中的数据进行增加和删除 ---- 增加删除元素函数
6.可以通过下标的方式访问数组中的元素 ---- 重载[]
7.可以获取数组中当前元素个数和数组的容量 ----- 访问函数

创建对应的类:


1.定义一个数组类

class myArr
{
public:private:
};


2.类中属性有:数组, 容量, 大小

该处要注意容量和大小不同:

容量:数组的可存放的元素个数

大小:数组已存放的数量个数 

class myArr
{
public:private:elemtype* arr;int myCapacity;int mySize;
};


3.数组函数有:

构造函数(容量)
	myArr(int Capacity){myCapacity = Capacity;/**/mySize = 0;/**/arr = new elemtype[Capacity];/*注意不可直接定义,要在堆区上new一块空间*/}
拷贝构造---->operator=(重载 = )
	myArr(const myArr& p){myCapacity = p.myCapacity;mySize = p.mySize;arr = new elemtype[myCapacity];/*注意要new空间,否则就是浅拷贝,会出现堆内存重复释放,还继续非法访问的问题*/for (int i = 0; i < mySize; i++){arr[i] = p.arr[i];}}

尾插法
void endInsert(int e){if (mySize > myCapacity){//模仿数组越界时的报错(直接终止程序)cout << "数组元素过多,超过容量,增加失败" << endl;exit(0);//终止程序(比return结束程序更彻底,return是返回上一层结果,而exit直接停止程序)}arr[mySize] = e;mySize++;}

若调用的是如下代码:

int main()
{myArr a(10);a.endInsert(1);a.endInsert(2);a.endInsert(3);a.endInsert(4);a.endInsert(5);a.endInsert(1);a.endInsert(2);a.endInsert(3);a.endInsert(4);a.endInsert(5);a.endInsert(1);a.endInsert(2);a.endInsert(3);a.endInsert(4);a.endInsert(5);cout << "数组的容量为:" << a.getCapacity() << " " << "数组大小为:" << a.getSize() << endl;int asize = a.getSize();cout << "a的数组元素为:";for (int i = 0; i < asize; i++)cout << a[i] << " ";cout << endl;return 0;
}

 这里初始化数组时只分配了10个数据的大小的内存,但是加入的数据有15个,发生了越界,因此会报错:

 

直接结束程序(请按任意键关闭此窗口),而没有继续打印数组元素 

尾删法
	void endDelete(){mySize--;}
获取数组容量
	int getCapacity(){return myCapacity;}
 获取数组大小
int getSize(){return mySize;}
析构函数
    ~myArr(){// delete arr[];//错误写法delete[] arr;//delete要提前知道释放的是数组myCapacity = 0;mySize = 0;}

总代码:

				/*数组类模板*///类模板案例
//案例描述:实现一个通用的数组类,要求如下:
//
//.可以对内置数据类型以及自定义数据类型的数据进行存储 ------ 将数组的数据类型设置为elemtype 
// .将数组中的数据存储到堆区 ----- new
//.构造函数中可以传入数组的容量 ---- 构造函数
//·提供对应的拷贝构造函数以及 operator =防止浅拷贝问题 ----- 重载=
//.提供尾插法和尾刷法对数组中的数据进行增加和删除 ---- 增加删除元素函数
// ·可以通过下标的方式访问数组中的元素 ---- 重载[]
//.可以获取数组中当前元素个数和数组的容量 ----- 访问函数/*
思路:
1.定义一个数组类
2.类中属性有:数组, 容量, 大小
3.数组函数有:构造函数(容量), 拷贝构造,operator=,利用下标的方式访问数组中的元素,
尾插法,尾删法,获取数组容量, 获取数组大小,析构
*/#include <iostream>
#include <stdlib.h>using namespace std;typedef int elemtype;class myArr
{
public:myArr(int Capacity){myCapacity = Capacity;mySize = 0;arr = new elemtype[Capacity];}myArr(const myArr& p){myCapacity = p.myCapacity;mySize = p.mySize;arr = new elemtype[myCapacity];for (int i = 0; i < mySize; i++){arr[i] = p.arr[i];}}int getSize(){return mySize;}int getCapacity(){return myCapacity;}void endInsert(int e){if (mySize > myCapacity){//模仿数组越界时的报错cout << "数组元素过多,超过容量,增加失败" << endl;exit(0);//终止程序(比return结束程序更彻底,return是返回上一层结果,而exit直接停止程序)}arr[mySize] = e;mySize++;}void endInsert(){mySize--;}int operator[](int idx){return arr[idx];}~myArr(){// delete arr[];//错误写法delete[] arr;myCapacity = 0;mySize = 0;}
private:elemtype* arr;int myCapacity;int mySize;
};int main()
{//构造a数组,容量为10个myArr a(10);//给a中插入数据a.endInsert(1);a.endInsert(2);a.endInsert(3);a.endInsert(4);a.endInsert(5);//a.endInsert(1);//a.endInsert(2);//a.endInsert(3);//a.endInsert(4);//a.endInsert(5);//a.endInsert(1);//a.endInsert(2);//a.endInsert(3);//a.endInsert(4);//a.endInsert(5);//打印a数组,当然可以封装为函数cout << "数组的容量为:" << a.getCapacity() << " " << "数组大小为:" << a.getSize() << endl;int asize = a.getSize();cout << "a的数组元素为:";for (int i = 0; i < asize; i++)cout << a[i] << " ";cout << endl;myArr b(a);int bsize = b.getSize();cout << "b的数组元素为:";for (int i = 0; i < bsize; i++)cout << b[i] << " ";cout << endl;return 0;
}

效果展示:

完结撒花~恭喜你又进步一点点啦~ 

如果你喜欢博主的话,用你的小手点点赞哦,点点收藏,如果想看博主的后序创作,可以点点关注哦

 ✨欢迎支持✨

      🎈创作不易,麻烦点点赞哦🎈

博主主页:脑子不好的小菜鸟

该文章专栏:项目_脑子不好的小菜鸟的博客-CSDN博客

文章特点:关键点和步骤讲解放在代码相应位置,大多为算法和刷题文章

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

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

相关文章

排序---数组和集合

1、数组排序 Arrays.sort(int[] a)这种形式是对一个数组的所有元素进行排序&#xff0c;并且是按照从小到大的排序。 public static void main(String[] args) {Integer []arr {1,2,3,4,5,6};//升序Arrays.sort(arr);for (int x:arr){System.out.print(x " ");}Sys…

IRIS / Chronicles 定义 Item Response Type 字段属性

Response Type 在关系数据库中可能没有这个选项&#xff0c;我们对关系数据库表中的数据返回的数据就是是数据&#xff0c;通常不再做过多定义。 但是 IRIS 会对返回的数据也做一些定义&#xff0c;这个就是我们说的 Response Type。 Single &#xff08;单一&#xff09; 这…

二维随机变量的条件分布-已知X概率密度,X条件下的Y概率密度求解y的概率密度

问题&#xff1a;设数X在区间(0,1)上随机地取值,当观察到Xx(0<x<1)时,数Y在区间(x,1)上随机地取值.求Y的概率密度f(y)&#xff1f; 求解&#xff1a; 首先&#xff0c;数X在区间(0,1)上均匀分布&#xff0c;因此其概率密度函数fX​(x)为&#xff1a; fX​(x)1 0<…

Unity类银河恶魔城学习记录11-7 p109 Aplly item modifiers源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili ItemData_Equipment.cs using System.Collections; using System.Collecti…

K8S安装和部署(kubeadmin安装1主2从)

这里用kubeadmin方式进行安装部署 1. 准备三台服务器 服务器地址 节点名称 192.168.190.200 master 主 192.168.190.201 node1 从 192.168.190.202 node2 从 2. 主机初始化&#xff08;所有主机&#xff09; 2.1根据规划设置主机名 #切换到192.168.190.200 hostnamectl…

327京东一面

1.项目相关 2.手撕SQL 两道 3.JMeter性能测试 首先&#xff0c;进行基准测试&#xff1a; 单用户测试&#xff08;单用户循环多次得到的数据&#xff09;&#xff1b;为多用户并发执行提供参考 其次&#xff0c;进行负载测试&#xff1a; 通过逐步增加系统负载&#xff0…

大数据学习-2024/3/29-oracle使用介绍

在plsql中登录ORACLE数据。 默认用户&#xff1a; 1、sys&#xff1a; 角色&#xff1a;数据库超级管理员账户。 权限&#xff1a;具有最高的权限&#xff0c;可以执行任何操作&#xff0c;包括操作数据字典和控制文件。可以创建和删除数据库对象&#xff0c;授予和回收其他用户…

Linux系统中安装一些常用的插件备用

Linux系统中安装一些常用的插件备用 1.安装wget yum -y install wget 2.安装vim yum -y install vim-enhanced 3.更换yum源为国内的阿里云源&#xff08;选择&#xff09; 1、备份CentOS-Base.repo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.…

代码随想录算法训练营第二十四天| 理论基础,77. 组合

题目与题解 参考资料&#xff1a;回溯法理论基础 带你学透回溯算法&#xff08;理论篇&#xff09;| 回溯法精讲&#xff01;_哔哩哔哩_bilibili 77. 组合 题目链接&#xff1a;​​​​​​​​​​​​​​77. 组合 代码随想录题解&#xff1a;77. 组合 视频讲解&#xff…

InputStreamReader类详解

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

Radash一款JavaScript最新的实用工具库,Lodash的平替!

文章目录 Lodash 的痛点进入正题--Radash特点 举例几个常用的api 一说lodash应该大部分前端同学都知道吧&#xff0c;陪伴我们好多年的JavaScript工具库&#xff0c;但是自从 ES6 出现后就慢慢退出前端人的视线&#xff0c;能ES6写的代码绝对不会用Lodash&#xff0c;也不是完全…

基于STC12C5A60S2系列1T 8051单片机的一个按键长按开关机后一个按键单击长按都增加数值另一个按键单击长按都减少数值应用

基于STC12C5A60S2系列1T 8051单片机的一个按键长按开关机后一个按键单击长按都增加数值另一个按键单击长按都减少数值应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介…

深入理解Java接口:定义、使用与重要性(day13)

导语&#xff1a;Java接口是Java编程语言中的一个核心概念&#xff0c;它提供了一种定义方法但不包含方法实现的方式。接口在Java编程中扮演着重要角色&#xff0c;能够帮助我们实现代码的高内聚、低耦合&#xff0c;提高代码的复用性和可维护性。本文将详细介绍Java接口的定义…

SQL复习专题

请结合B站-技术蛋老师 视频学习 核心语法 一、增&#xff1a;数据库/表格 create create database 数据库名&#xff1b;#创建表&#xff08;列名类型&#xff09; mysql> create table eggs_record(-> id int,-> egg_name varchar(10),-> sold date-> ); 这…

Android熄屏/亮屏,旋转屏幕/横竖屏切换生命周期变化与activity销毁重建

Android熄屏/亮屏&#xff0c;旋转屏幕/横竖屏切换生命周期变化与activity销毁重建 1、熄屏/亮屏 熄屏后&#xff0c;Android生命周期走&#xff1a; onPause onStop 接着点亮Android手机屏幕&#xff0c;生命周期走&#xff1a; onRestart onStart onResume 2、旋转屏幕&…

服务器中有g++,但是查询不到,Command ‘g++‘ not found

有gcc但是查询不到g&#xff0c;gcc版本为9.5.0 (base) zyICML:~$ g -V Command g not found, but can be installed with: apt install g Please ask your administrator. 突然就出现这个问题&#xff0c;导致detectron装不上&#xff0c;现在有时间了专门研究下怎么解决 这…

阿里云8核32G服务器g8y租用优惠价格243.30元/月

阿里云8核32G服务器g8y租用优惠价格243.30元/月&#xff0c;配置云服务器g8y&#xff08;ecs.g8y.2xlarge&#xff09;8核32G、按固定带宽1M-5M、可选ESSD云盘40G起&#xff0c;优惠价格243.30元一个月&#xff0c; 阿里云服务器优惠活动 aliyunfuwuqi.com/go/aliyun 阿里云服务…

【重制版】在Android手机上安装kali Linux

前言 由于kali官方的Nethunter2的安装代码因为…无法访问&#xff0c;手头又没有一些受支持的机器3&#xff0c;所以做了这个脚本&#xff0c;供大家使用。 工具 搭载基于Android的手机TermuxVNC Viewer 安装必备软件(如已安装请忽略) 请到 https://www.hestudio.net/post…

公安可视化分析指挥调度平台的构成要素

匠心接单中...8年前端开发和UI设计接单经验&#xff0c;完工项目1000&#xff0c;持续为友友们分享有价值、有见地的干货观点&#xff0c;有业务需求的老铁&#xff0c;欢迎关注发私信。 公安可视化分析指挥调度平台是一个集成了多种技术和功能的综合性平台&#xff0c;主要由…

mysql 日期时间函数

学习了字符串函数&#xff0c;接着学习日期时间函数&#xff0c; 3&#xff0c;日期和时间函数 日期和时间函数主要用来处理日期和时间值&#xff0c;一般的日期函数除了使用DATE类型的参数外&#xff0c;也可以使用DATETIME或者TIMESTAMP类型的参数&#xff0c;但会忽略这些值…