1.
实现数组的动态分配元素个数
2.
增加
Array
能够处理的数组类型
3.
使
array
支持指针形式的访问
4.
重载赋值运算符和复制构造函数
pop就是只减一即可。
不是很完善,期待更正。
5.
在尾部增加和删除元素函数
#include <iostream>
using namespace std;
template <class T>
class Array
{
private:
T *arr;
int arrsize;
public:
Array(int asize=100):arrsize(asize){arr=new T[asize];}
void D(int i)
{
arrsize=i;
}
~Array(){delete []arr;}
Array&operator=(const Array &a);//
Array(const Array &a);//ok
T& operator[](int ind);
operator T*() {return arr;}
void push_back(int v); //尾部添加元素v
void pop_back(); //删除最后一个元素
};
template <class T>
Array<T>::Array(const Array &a)//ok
{
arrsize=a.arrsize;
arr=a.arr;
}
template <class T>
Array<T>& Array<T>::operator=(const Array &a)//等号重载
{
int i;
if(this->size>=a.size)//
{
for(i=0; i<a.size; i++)
*(this->arr+i)=*(a.arr+i);
this->size=a.size;
return *this;
}
else
{
delete[] this->arr;
this->arr=new int[a.size+1];
for(i=0; i<a.size; i++)
*(this->arr+i)=*(a.arr+i);
this->size=a.size;
return *this;
}
}
template <class T>
T& Array<T>::operator[](int ind)
{
static T t;
if (ind<arrsize&&ind>=0)
return arr[ind];
else
{
cout<<"下标出界:("<<ind<<")";
return t;
}
}
template <class T>
void Array<T>::push_back(int v)
{
arrsize+=1;
*(arr+arrsize-1)=v;
}
/*
template <class T>
void Array<T>::push_back(int v)
{
T *b;
b=new T[2*arrsize];
for(int i=0;i<arrsize;i++)
{
*(b+i)=*(a+i);
}
*(b+i)=v;
}*/
<vector>中的push函数是每次增加一个元素,会新开辟个数组--增加一倍。
pop就是只减一即可。
不是很完善,期待更正。