template <class T>
class Arrary{
private:
T *list;
int size;
public:
Arrary(int sz = 50);
Arrary(const Arrary<T> &a);
Arrary<T> & operator = (const Arrary<T> &rhs);
T &operator [](int i);
const T &operator [](const int i)const;
operator T*();
operator const T*()const;
int getSize()const;
void resize(int sz);
~Arrary();
};
template <class T>
Arrary<T>::Arrary(int sz)
{
assert(sz >= 0);
size = sz;
list = new T[size];
}
template <class T>
Arrary<T>::~Arrary()
{
delete []list;
}
template <class T>
Arrary<T>::Arrary(const Arrary<T> &a)
{
size = a.size;
list = new T[size];
for (int i = 0;i<size ;i++){
list[i] = a.list[i];
}
}
template <class T>
Arrary<T>& Arrary<T>::operator = (const Arrary<T> &rhs){
if( &rhs != this ){
if(size != rhs.size){
delete []list;
size = rhs.size;
list = new T[size];
}
for(int i = 0;i<size ;i++)
list[i] = rhs.list[i];
}
return *this;
}
template <class T>
T & Arrary<T>::operator [](int n)
{
assert(n>=0&&n<size);
return list[n];
}
template <class T>
const T & Arrary<T>::operator [](const int n)const
{
assert(n >= 0&&n <size);
return list[n];
}
template <class T>
Arrary<T>::operator T*()
{
return list;
}
template <class T>
int Arrary<T>::getSize()const
{
return size;
}
template <class T>
void Arrary<T>::resize(int sz)
{
assert(sz>0);
if(sz == size)
return;
T *newlist = new T[sz];
int n = (sz < size)?sz : size ;
for(int i = 0;i<n;i++){
newlist[n] = list[n];
}
delete []list;
list = newlist;
size = sz;
}
动态数组类模板C++
最新推荐文章于 2024-09-10 10:01:57 发布