您的位置:首页 > 编程语言 > C语言/C++

c++动态数组模板实例

2016-09-15 15:17 337 查看
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;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: