1.头文件array.h
#ifndef array
#define array
template <class T>
class array{
private:
int length;
int size;
T *base;
public:
bool init();
bool EnsureFul();
bool add(T item);
bool insert(int index, T item);
T del(int index);
T getItem(int index);
void display;
};
#endif
2.源文件array.cpp
#include<iostream>
#include"array.h"
using namespace std;
template<typename T> bool array<T>::init(){
base = (T*) malloc (10 * sizeof(T));
if (base == nullptr)
return false;
size = 10;
length = 0;
return true;
};
template<typename T> bool array<T>::EnsureFull(){
if (length >= size)
{
T* newBase = (T*)realloc(base, sizeof(T)* 10 + size);
if (newBase == nullptr)
return false;
base = newBase;
size += 10;
newBase = nullptr;
}
return true;
};
template<typename T> bool array<T>::add(T item){
if (!EnsureFull()){
return false;
}
T *p = base + length;
*p = item;
length++;
return true;
};
template<typename T> bool array<T>::insert(int index, T item){
if (!EnsureFull()){
return false;
}
if (index < 1 || index > length){
return false;
}
T *p = base + length - 1;
T *q = base + size - 1;
while (p <= q)
{
*(q + 1) = *q;
q--;
}
*p = item;
q = nullptr;
p = nullptr;
length++;
return true;
}
template<typename T>T array<T>::del(int index){
if (index < 1 || index > length){
return NULL;
}
T *q = base + index - 1;
T item = *q;
q++;
T *p = base + length;
while (q <= p){
*(q - 1) = *q;
++q;
}
length--;
return item;
}
template<typename T>T array<T>::getItem(int index){
if (index<1 || index > length){
return NULL;
}
T *q = base;
return *(q + index - 1);
}
template<typename T> void array<T>::display()
{
T *q = base;
T *p = base + length - 1;
while (q <= p) {
cout << *(q++) << " ";
}
cout << endl;
}
3.测试
void main()
{
array<int> *Ay = new array<int>;
Ay->init();
Ay->add(4);
Ay->add(5);
Ay->add(6);
Ay->insert(1, 7);
Ay->insert(2, 8);
Ay->del(3);
cout<<Ay->getItem(2);
Ay->display();
cout << "hello" << endl;
system("pause");
}