DynamicArray.hpp
#pragma once
const int EXPAND_MEMORY = 10;
template <typename T>
class DynamicArray
{
public:
DynamicArray();
~DynamicArray();
void append(const T& value);
void remove(int index);
void print();
int cap() { return capacity; }
int len() { return length; }
T& operator[](int index);
private:
T* pArray;
int length;
int capacity;
};
template <typename T>
DynamicArray<T>::DynamicArray()
{
pArray = new T[EXPAND_MEMORY];
capacity = EXPAND_MEMORY;
length = 0;
}
template <typename T>
DynamicArray<T>::~DynamicArray()
{
delete[] pArray;
pArray = nullptr;
capacity = 0;
length = 0;
}
template <typename T>
void DynamicArray<T>::append(const T& value)
{
if (length >= capacity)
{
T* newArray = new T[EXPAND_MEMORY * 2];
memcpy(newArray, pArray, capacity * sizeof(T));
delete[] pArray;
pArray = newArray;
capacity *= 2;
}
pArray[length] = value;
length++;
}
template <typename T>
void DynamicArray<T>::remove(int index)
{
if (index > length)
{
return;
}
memcpy(&pArray[index - 1], &pArray[index], (length - index) * sizeof(T));
length--;
}
template <typename T>
void DynamicArray<T>::print()
{
for (int i = 0; i < length; i++)
{
std::cout << pArray[i] << std::endl;
}
}
template <typename T>
T& DynamicArray<T>::operator[](int index)
{
return pArray[index];
}
student.h
#pragma once
#include<string>
#include<iostream>
using namespace std;
class Student {
public:
explicit Student()
{
this->name = "";
this->score = 0;
}
explicit Student(string name, int score)
{
this->name = name;
this->score = score;
}
friend ostream& operator<<(ostream& output, const Student& stu)
{
output << "name=" << stu.name << " score=" << stu.score;
return output;
}
private:
string name;
int score;
};
main.cpp
#include <iostream>
#include "DynamicArray.hpp"
#include "Student.h"
int main()
{
DynamicArray<Student>* pArray = new DynamicArray<Student>();
for (int i = 0; i < 10;i++) {
pArray->append(Student("Tom", i));
}
cout << "capacity=" << pArray->cap() << " length=" << pArray->len() << endl;
pArray->append(Student("Tom", 100 ));
pArray->print();
cout << "capacity=" << pArray->cap() << " length=" << pArray->len() << endl;
std::cout << (*pArray)[10] << std::endl;
return 0;
}