数组类模板

来源:互联网 发布:重庆网络推广平台 编辑:程序博客网 时间:2024/05/17 02:35
  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. template <typename T>  
  5. class Array  
  6. {  
  7. public:  
  8.     //构造函数  
  9.     Array():list(nullptr),size(0){};  
  10.     Array(T *ar,unsigned int len):size(len)  
  11.     {  
  12.         list = new T[size];  
  13.         for(unsigned int i = 0; i < len; ++i)  
  14.             list[i] = ar[i];  
  15.     }  
  16.     Array(const Array&);  
  17.     //下标运算符  
  18.     T& operator[](unsigned int n)  
  19.     { return list[n];}  
  20.     const T& operator[](unsigned int n) const  
  21.     { return list[n];}  
  22.     //赋值运算符  
  23.     Array& operator=(const Array& arr);  
  24.     //合并数组  
  25.     Array operator+(const Array& arr);  
  26.     void resize(unsigned int n);  
  27.     void show();  
  28.     ~Array(){delete [] list;}  
  29. private:  
  30.     T *list;  
  31.     unsigned int size;  
  32. };  
  33.   
  34. template <typename T>  
  35. Array<T>::Array(const Array& arr)  
  36. {  
  37.     if(list != nullptr)  
  38.         delete [] list;  
  39.     size = arr.size;  
  40.     list = new T[size];  
  41.     for(unsigned int i = 0; i < size; ++i)  
  42.         list[i] = arr[i];  
  43. }  
  44.   
  45. template <typename T>  
  46. Array<T> Array<T>::operator+(const Array& arr)  
  47. {  
  48.     unsigned int i;  
  49.     unsigned int len = this->size+arr.size;  
  50.     T *t = new T[len];  
  51.     for(i = 0; i < this->size; ++i)  
  52.         t[i] = (*this)[i];  
  53.     for(unsigned int j = 0; j < arr.size; ++i,++j)  
  54.         t[i] = arr[j];  
  55.     Array temp(t,len);  
  56.     delete [] t;  
  57.     return temp;  
  58. }  
  59.   
  60. template <typename T>  
  61. Array<T>& Array<T>::operator=(const Array& arr)  
  62. {  
  63.     if(this != &arr)  
  64.     {  
  65.         if(list != nullptr)  
  66.             delete [] list;  
  67.         size = arr.size;  
  68.         list = new T[size];  
  69.         for(unsigned int i = 0; i < size; ++i)  
  70.             list[i] = arr[i];  
  71.         return *this;  
  72.     }  
  73.     return *this;  
  74. }  
  75.   
  76. template <typename T>  
  77. void Array<T>::resize(unsigned n)  
  78. {  
  79.     if(list == nullptr)  
  80.     {  
  81.         list = new T[n];  
  82.         size = n;  
  83.         return ;  
  84.     }  
  85.     else  
  86.     {  
  87.         T *temp = new T[n];  
  88.         for(unsigned i = 0; i < size; ++i)  
  89.             temp[i] = list[i];  
  90.         delete [] list;  
  91.         list = temp;  
  92.         size = n;  
  93.         return ;  
  94.     }  
  95. }  
  96.   
  97. template <typename T>  
  98. void Array<T>::show()  
  99. {  
  100.     for(unsigned i = 0; i < size; ++i)  
  101.         cout << list[i] << " ";  
  102.     cout << endl;  
  103.     return ;  
  104. }  
  105.   
  106. int main()  
  107. {  
  108.     double a[8] = {1.1,2.1,3.1,4.1,5.1,6.1,7.1,8.1};  
  109.     double b[8] = {10.1,20.1,30.1,40.1,50.1,60.1,70.1,80.1};  
  110.     Array<double> array1(a,8),array3,array4;  
  111.     const Array<double> array2(b,8);  
  112.     array4 = array3 = array1 + array2;  
  113.     array3.show();  
  114.     array4.resize(20);  
  115.     array4[8] = 99;  
  116.     cout << array4[8] << endl;  
  117.     cout << array2[3] << endl;  
  118.     return 0;  
  119. }  
0 0