目录
介绍:
案例描述:
思路:
对要求分别分析实现:
创建对应的类:
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博客
文章特点:关键点和步骤讲解放在代码相应位置,大多为算法和刷题文章