//通用数组类
#pragma once
#include<iostream>
using namespace std;
template<class T> //模板声明
class MyArray
{
public:
//构造方法
MyArray(int capacity)
{
this->m_Capacity = capacity;
this->m_Size = 0;
this->pAddress = new T[this->m_Capacity];
}
//复制数组构造方法
MyArray(const MyArray& Arr)
{
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];
}
}
//重写‘=’,避免浅拷贝问题
MyArray& operator=(const MyArray& Arr)
{
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_Capacity; i++)
{
this->pAddress[i] = Arr.pAddress[i];
}
return *this;
}
//尾插
void Push_Back(const T & val)
{
if (this->m_Capacity == this->m_Size)
{
return;
}
this->pAddress[this->m_Size] = val;
this->m_Size++;
}
//删除最后一个
void Pop_Back()
{
if (this->m_Size == 0)
{
return;
}
this->m_Size--;
}
//重载[]
T operator[](int index)
{
return this->pAddress[index];
}
int getCapacity()
{
return this->m_Capacity;
}
int getSize()
{
return this->m_Size;
}
//析构方法
~MyArray()
{
if (this->pAddress != NULL)
{
delete[] this->pAddress;
this->pAddress = NULL;
}
}
private:
T * pAddress;
int m_Capacity;
int m_Size;
};
#include<iostream>
using namespace std;
#include "MyArray.hpp"
#include <string>
void printIntArray(MyArray <int>& arr)
{
for (int i = 0; i < arr.getSize(); i++)
{
cout << arr[i] << endl;
}
}
void test01()
{
MyArray<int> array1(10);
for (int i = 0; i < 10; i++)
{
array1.Push_Back(i);
}
cout << "array1打印输出:" << endl;
printIntArray(array1);
cout << "array1的大小:" << array1.getSize() << endl;
cout << "array1的容量:" << array1.getCapacity() << endl;
cout << "--------------------------" << endl;
//拷贝构造
MyArray<int> array2(array1);
//尾删一位
array2.Pop_Back();
cout << "array2打印输出:" << endl;
printIntArray(array2);
cout << "array2的大小:" << array2.getSize() << endl;
cout << "array2的容量:" << array2.getCapacity() << endl;
}
//测试自定义数据类型
class Person {
public:
Person() {}
Person(string name, int age) {
this->m_Name = name;
this->m_Age = age;
}
public:
string m_Name;
int m_Age;
};
//打印数组方法
void printPersonArray(MyArray<Person>& personArr)
{
for (int i = 0; i < personArr.getSize(); i++) {
cout << "姓名:" << personArr[i].m_Name << " 年龄: " << personArr[i].m_Age << endl;
}
}
void test02()
{
//创建数组
MyArray<Person> pArray(10);
Person p1("孙悟空", 30);
Person p2("韩信", 20);
Person p3("妲己", 18);
Person p4("王昭君", 15);
Person p5("赵云", 24);
//插入数据
pArray.Push_Back(p1);
pArray.Push_Back(p2);
pArray.Push_Back(p3);
pArray.Push_Back(p4);
pArray.Push_Back(p5);
//打印数组
printPersonArray(pArray);
cout << "pArray的大小:" << pArray.getSize() << endl;
cout << "pArray的容量:" << pArray.getCapacity() << endl;
}
int main() {
//test01();
test02();
system("pause");
return 0;
}