#include<iostream>
using namespace std;
#include "MyArray.hpp"
void printArray(MyArray<int> &arr)
{
for (int i = 0; i < arr.getSize(); i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
void test01()
{
MyArray <int>arrl(5);
for(int i=0;i<5;i++)
{
arrl.push_back(i);
}
printArray(arrl);
cout<<"容量为:"<<arrl.getCapacity()<<endl;
cout<<"大小为:"<<arrl.getSize()<<endl;
arrl.pop_back();
printArray(arrl);
}
class Person
{
public:
Person(){};
Person(string name,int age)
{
this->m_Name=name;
this->m_Age=age;
}
string m_Name;
int m_Age;
};
void printPersonArray(MyArray<Person> &arr)
{
for (int i = 0; i < arr.getSize(); i++)
{
cout << arr[i].m_Name << arr[i].m_Age << endl;
}
}
void test02()
{
MyArray <Person>arr(5);
Person p1("Tom",10);
Person p2("Jerry",11);
Person p3("Mike",12);
Person p4("Lucy",13);
Person p5("Lili",14);
arr.push_back(p1);
arr.push_back(p2);
arr.push_back(p3);
arr.push_back(p4);
arr.push_back(p5);
printPersonArray(arr);
cout<<"容量为:"<<arr.getCapacity()<<endl;
cout<<"大小为:"<<arr.getSize()<<endl;
arr.pop_back();
}
int main()
{
test01();
test02();
cout << "Hello World!" << endl;
system("pause");
return 0;
}
MyArray.hpp
#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[this->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 != nullptr)
{
delete[] this->pAddress;
this->pAddress = nullptr;
this->m_Size = 0;
this->m_Capacity = 0;
}
this->m_Capacity = arr.m_Capacity;
this->m_Size = arr.m_Size;
this->pAddress = new T[this->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_Size == this->m_Capacity)
{
cout << "数组已满" << endl;
return;
}
this->pAddress[this->m_Size] = val;
this->m_Size++;
}
void pop_back()
{
if (this->m_Size == 0)
{
cout << "数组已空" << endl;
return;
}
this->m_Size--;
}
T &operator[](int index)
{
if (index >= this->m_Size || index < 0)
{
cout << "数组越界" << endl;
throw - 1;
}
return this->pAddress[index];
}
int getSize()
{
return this->m_Size;
}
int getCapacity()
{
return this->m_Capacity;
}
~MyArray()
{
if (this->pAddress != nullptr)
{
delete[] this->pAddress;
this->pAddress = nullptr;
}
}
private:
T *pAddress;
int m_Capacity;
int m_Size;
};