📄 arry.h
字号:
#include<iostream.h>
#include<stdlib.h>
enum ErrorType{invalidArraySize,memoryAlloctionError,indexOutOfRange};
char *errorMsg[]=
{
"Invalid array size:","Memory alloction error:","Invalid index:"
};
template <class T>
class Array
{
private:
T* alist;
int size;
void Error(ErrorType errorCommitted,int badIndex=0)const;
public:
Array(int sz=50);
Array(const Array<T>& X);
~Array(void);
Array<T>& operator=(const Array<T>& rhs);
T& operator[](int i);
operator T* (void) const;
int ListSize(void)const;
void Resize(int sz);
};
template <class T>
void Array<T>::Error(ErrorType errorCommitted,int badIndex)const
{
}
template <class T>
Array<T>::Array(int sz)
{
//检查数组大小参数是否合法
if(sz<=0)
Error(invalidArraySize);
//给size赋值并动态申请内存
size=sz;
alist=new T[size];
//确保系统分配了所需内存
if(alist==NULL)
Error(memoryAlloctionError);
}
template <class T>
Array<T>::Array(const Array<T>& X)
{
//取得对象X的大小并将其赋值给当前对象
int n=X.size;
size=n;
//为对象申请新内存并进行出错检查
alist=new T[n];
if(alist==NULL)
Error(memoryAlloctionError);
//从X中拷贝数组元素到当前对象
T* srcptr=X.alist;//X.alist的首地址
T* destptr=alist; //alist的首地址
while(n--)//拷贝表
*destptr++=*srcptr++;
}
template <class T>
Array<T>::~Array(void)
{
delete[] alist;
}
template <class T>
Array<T>& Array<T>::operator=(const Array<T>& rhs)
{
alist=rhs;
return *this;
}
//重载下标运算符
template <class T>
T& Array<T>::operator[](int n)
{
//数据越界检查
if(n<0||n>size-1)
Error(indexOutOfRange,n);
//从私有数组中返回元素值
return alist[n];
}
//指针转换运算符
template <class T>
Array<T>::operator T* (void) const
{
//返回当前对象中私有数组的首地址
return alist;
}
template <class T>
int Array<T>::ListSize(void)const
{
return size;
}
//调整数组大小运算符
template <class T>
void Array<T>::Resize(int sz)
{
//检查新的大小参数;若其小于0,则退出程序
if(sz<=0)
Error(invalidArraySize);
//若大小不变,则简单返回
if(sz==size)
return;
//需申请新的内存,确认系统已经分配所需内存
T*newlist=new T[sz];
if(newlist==NULL)
Error(memoryAlloctionError);
//n为需拷贝元素的个数
int n=(sz<=size)?sz:size;
T*srcptr=alist; //alist的首地址
T*destptr=newlist;//newalist的首地址
while(n--) //拷贝表表元素
*destptr++=*srcptr++;
//删除旧表
delete[] alist;
//将alist指针指向newlist,并改变size大小值
alist=newlist;
size=sz;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -