c++动态数组模板实例

Array.h#ifndef ARRAY_H#define ARRAY_H#include //数组类模板定义templateclass Array{private:T* list;//T类型指针,用于存放动态分配的数组内存首地址int size;//数组大小public:Array(int sz=50);//构造函数Array(const Array&a);//复制构造函数~Array();Array& operator=(const Array&rhs);//重载"="使数组对象可以整体赋值T& operator [ ](int i);//重载[ ],使Array对象可以起到普通数组作用const T&operator [ ](int i)const;//"[]"运算符针对const重载operator T*();//重载T*类型转换使Array对象可以起到普通数组作用 operator const T*()const;int getSize()const;//取数组大小void reSize(int sz);//修改数组大小};//构造函数templateArray::Array(int sz){assert(sz>=0);//sz数组大小 非负size=sz;list=new T[size];//动态分配size个T类型的元素空间cout<<"构造函数"<<endl;}//析构函数templateArray::~Array(){delete []list;}//复制构造函数template//深拷贝Array::Array(const Array&a){//从对象a取得数组大小,赋给当前对象的成员size=a.size;//为对象申请内存并进行出错检查list=new T[size];//从对象a复制数组元素到本对象for(int i=0;i<size;i++){list[i]=a.list[i];}}//重载"="运算符,将对象赋值给本对象,实现对象之间整体赋值templateArray&Array::operator=(const Array& rhs){if(&rhs!=this){//如果本对象中数组大小与rhs不同,则删除数组原有内存,然后重新分配if(size!=rhs.size){delete []list;//删除原有数组内存size=rhs.size;//设置本对象的数组大小list=new T[size];//重新分配size个元素内存}//从对象rhs复制数组元素到本对象for(int i=0;i<size;i++)list[i]=rhs.list[i];}return *this;//返回当前对象引用}//重载下标运算符,实现普通数组通过下标访问元素,并有越界检查templateT &Array::operator [ ](int i){assert(i>=0&&i<size);//检查下标是否越界return list[i];//返回下标为n元素}templateconst T &Array::operator [ ](int i)const{assert(i>=0&&i<size);//检查下标是否越界return list[i];//返回下标为n元素}/*1、重载指针转换运算符,将Array类的对象名转换为T类型的指针2、指向当前对象的私有数组3、使用普通数组首地址一样使用Array类的对象名*/templateArray::operator T *(){return list;//返回当前对象私有数组的首地址}templateArray::operator const T *()const{return list;//返回当前对象私有数组的首地址}//取数组大小templateint Array::getSize()const{return size;//返回当前对象私有数组的首地址}//修改数组大小templatevoid Array::reSize(int sz){assert(sz>0);//检查是否非负if(sz==size){return;//与原来大小一样 不用做}T* newList=new T[sz];//申请新的数组内存int n=(sz<size)?sz:size;//将较小那个赋给n//将原有数组中前n个元素复制到新数组for(int i=0;i<n;i++){newList[i]=list[i];}delete[] list;//删除原数组list=newList;//使list指向新数组size=sz;//更新size}#endif //array.hmain.cpp#include #include #include #include "Array.h"using namespace std;int main(){//用来存放质数的数组,初始状态为10个元素Arraya(10);Arrayb(4);int count=0;int n=6;for(int i=2;i<=n;i++){//检查i是否能被比它小的质数整除bool isPrime=true;for(int j=0;j<count;j++){if(i%a[j]==0)//若i被a[j]整除 说明i 不是质数{isPrime=false;break;}}//把i写入质数表if(isPrime){//如果质数表满 将其空间加倍if(count==a.getSize())a.reSize(count*2);a[count++]=i;}}b=a;for(int i=0;i<count;i++)//输出质数{cout<<setw(8)<<b[i];}cout<<endl;return 0;}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值