幽沉谢世事,俯默窥唐虞。这篇文章主要讲述模板自定义数组相关的知识,希望能为你提供帮助。
制造通用模板,创建自定义的数组
【模板自定义数组】自定义数组.hpp--文件
#pragma once
#include< iostream>
using namespace std;
#include< string>
template< class T>
class Myarry
public:
Myarry() ; //自己创建有参构造,编译器就不提供无参构造,所以必须自己写一次无参构造,即使是空实现也要写!
Myarry(int capacity)//有参构造函数
this-> capacity = capacity;
this-> size = 0;
this-> marry = new T[this-> capacity]; //把数组创建在堆区
~Myarry()//析构函数
if (this-> marry !=NULL)
delete []this-> marry; //析构数组必须加[],否则会引发断点
marry = NULL;
this-> capacity = 0;
this-> size = 0;
Myarry(const Myarry& arr)//拷贝构造
this-> capacity = arr.capacity;
this-> size = arr.size;
this-> marry = new T[arr.capacity];
for (int i = 0; i < arr.size; i++)//把数据拷贝过来
this-> marry[i] = arr-> marry[i];
//等号赋值
Myarry& operator=(const Myarry& arr)
if (this-> marry != NULL)//如果有数据先清空,再赋值
delete[]this-> marry;
this-> marry= NULL;
this-> size = 0;
this-> capacity = 0;
this-> capacity = arr.capacity;
this-> size = arr.size;
this-> marry = new T[this-> capacity];
for (int i = 0; i < this-> size; i++)//将数据进行拷贝
this-> marry[i] = arr.marry[i];
return *this;
void pushback(const T& ptr)//尾加法
if (this-> capacity == this-> size)
cout < < "容量已满!" < < endl;
return;
this-> marry[this-> size] = ptr;
this-> size++;
void deleteback()//尾删法
if (this-> size == 0)
cout < < "数据为零,没有可删数据!" < < endl;
delete this-> marry[this-> size - 1];
this-> size--;
T & operator[](int index)//通过下标访问数组,并使它作为左值加&
if (index > this-> capacity)
cout < < "访问越界!" < < endl;
exit(0);
return this-> marry[index];
int gercapacity()//获取数组容量
return this-> capacity;
int getsize()//获取数组元素个数
return this-> size;
private:
T * marry; //数组
int capacity; //数组容量
int size; //数组元素个数
;
测试文件
#include "自定义数组.hpp"
class person
public:
person()
this-> age = 0;
int age;
string name;
;
void text01()
person p[4];
p[0].age = 20;
p[0].name = "张三";
p[1].age = 0;
p[1].name = "李四";
p[2].age = 40;
p[2].name = "王五";
p[3].age = 80;
p[3].name = "赵六";
Myarry< person> pp(10);
for (int i = 0; i < 4; i++)
pp.pushback(p[i]);
for (int i = 0; i < pp.getsize(); i++)
cout < < pp[i].name< < pp[i].age< < endl;
void text02()
Myarry< int> inta(10);
for (int i = 0; i < 5; i++)
inta.pushback(i);
for (int i = 0; i < inta.getsize(); i++)
cout < < inta[i] < < endl;
int main()
/*text02(); */
text01();
return 0;
推荐阅读
- ELT.ZIPOpenHarmony啃论文俱乐部——多维探秘通用无损压缩
- 关于用好MySQL索引的那些事儿
- 北亚服务器数据恢复3个磁盘组成的raid5中1个硬盘掉线,阵列出现故障,分区不能识别的数据恢复案例
- spring cloud alibaba springboot nacos 版本对应
- # yyds干货盘点 # 盘点一个Pandas中explode()爆炸函数应用实际案例
- MySQL误删数据怎么恢复drop/truncate误删恢复
- 游戏开发新手入门教程14:整合到一起,做出小游戏
- #yyds干货盘点# 解决华为机试(成绩排序)
- CentOS8安装Geant4笔记(CentOS8安装Qt5.15.2并测试运行环境)