自适应模板Array

这是一个自适应大小的Array的类型(不重复节点)
功能:
加入节点
删除节点
返回缓冲区
返回缓冲需大小


类定义与实现:

  1. #ifndef __MYVECTOR_H__
  2. #define __MYVECTOR_H__
  3. #include "memory.h"
  4. //加入一个不重复的节点到vector中,自动更新内容大小
  5. template <class T> class MyVector{
  6. public:
  7.     void Add(T t)
  8.     {
  9.         for(int i=0;i<_num;i++)    if(_pBuffer[i] == t) return;
  10.         if(_num+1>_size)
  11.         {
  12.             T *p = new T[_size*2];
  13.             memcpy(p,_pBuffer,sizeof(T)*_size);
  14.             delete[] _pBuffer;
  15.             _pBuffer = p;
  16.             _size = 2*_size;
  17.         }
  18.         _pBuffer[_num] = t;
  19.         _num++;
  20.     }
  21.    
  22.     void Delete(T t)
  23.     {
  24.         for(int i=0;i<_num;i++)   
  25.         {
  26.             if(_pBuffer[i] == t)
  27.             {               
  28.                 for(int j=i;j<_num;j++)
  29.                     _pBuffer[j]=_pBuffer[j+1];
  30.                 _num--;
  31.             }
  32.         }
  33.     }
  34.     T* GetBuffer(){return _pBuffer;}
  35.     int Count(){return _num;}
  36.     int BufferSize(){return _size;}
  37. public:
  38.     MyVector(int sz = 1):_num(0) {_size = sz; _pBuffer = new T[_size];}
  39.     ~MyVector(){delete[] _pBuffer;}
  40. private:
  41.     int _num;
  42.     int _size;
  43.     T* _pBuffer;
  44. };
  45. //加入一个不重复的节点与其相对应的节点到vector中,自动更新内容大小
  46. template <class T,class T2> class MyVector2{
  47. public:
  48.     void Add(T t,T2 t2)
  49.     {
  50.         for(int i=0;i<_num;i++)    if(_pBuffer[i] == t) return;
  51.         if(_num+1>_size)
  52.         {
  53.             T *p = new T[_size*2];
  54.             T2 *p2 = new T2[_size*2];
  55.             memcpy(p,_pBuffer,sizeof(T)*_size);
  56.             memcpy(p2,_pBuffer2,sizeof(T2)*_size);
  57.             delete[] _pBuffer;
  58.             delete[] _pBuffer2;
  59.             _pBuffer = p;
  60.             _pBuffer2 = p2;
  61.             _size = 2*_size;
  62.         }
  63.         _pBuffer[_num] = t;
  64.         _pBuffer2[_num] = t2;
  65.         _num++;
  66.     }
  67.    
  68.     void Delete(T t)
  69.     {
  70.         for(int i=0;i<_num;i++)   
  71.         {
  72.             if(_pBuffer[i] == t)
  73.             {               
  74.                 for(int j=i;j<_num;j++)
  75.                 {
  76.                     _pBuffer[j]=_pBuffer[j+1];
  77.                     _pBuffer2[j]=_pBuffer2[j+1];
  78.                 }
  79.                 _num--;
  80.             }
  81.         }
  82.     }
  83.     T* GetBuffer(){return _pBuffer;}
  84.     T2* GetBuffer2(){return _pBuffer2;}
  85.     int Count(){return _num;}
  86.     int BufferSize(){return _size;}
  87. public:
  88.     MyVector2(int sz = 1):_num(0) {_size = sz; _pBuffer = new T[_size];_pBuffer2 = new T2[_size];}
  89.     ~MyVector2(){delete[] _pBuffer;delete[] _pBuffer2;}
  90. private:
  91.     int _num;
  92.     int _size;
  93.     T* _pBuffer;
  94.     T2* _pBuffer2;
  95. };
  96. #endif



使用方法:
  1. #include "myvector.h"
  2. void printvect(MyVector<int>& v)
  3. {
  4.     int num = v.Count();
  5.     int sz = v.BufferSize();
  6.     int* pbuffer = v.GetBuffer();
  7.     printf("缓冲:%d个|实际:%d个|",sz,num);
  8.     for(int i=0;i<num;i++)
  9.     {
  10.         printf("%d ",pbuffer[i]);
  11.     }
  12.     printf("/n");
  13. }
  14. void printvect2(MyVector2<int,float>& v)
  15. {
  16.     int num = v.Count();
  17.     int sz = v.BufferSize();
  18.     int* pbuffer1 = v.GetBuffer();
  19.     float* pbuffer2 = v.GetBuffer2();
  20.     printf("缓冲:%d个|实际:%d个|",sz,num);
  21.     for(int i=0;i<num;i++)
  22.     {
  23.         printf("%d:%f ",pbuffer1[i],pbuffer2[i]);
  24.     }
  25.     printf("/n");
  26. }
  27. int main(int argc, char* argv[])
  28. {
  29.     MyVector2<int,float> vec;
  30.     printvect2(vec);
  31.     vec.Add(1,0.1);
  32.     printvect2(vec);
  33.     vec.Add(2,0.2);
  34.     printvect2(vec);
  35.     vec.Add(3,0.3);
  36.     printvect2(vec);
  37.     vec.Add(4,0.4);
  38.     printvect2(vec);
  39.     vec.Delete(5);
  40.     printvect2(vec);
  41.     vec.Delete(3);
  42.     printvect2(vec);
  43.     vec.Add(4,0.4);
  44.     printvect2(vec);
  45.     vec.Add(7,0.7);
  46.     printvect2(vec);
  47.     vec.Add(8,0.88);
  48.     printvect2(vec);
  49.     vec.Add(9,0.99);
  50.     printvect2(vec);
  51.     printf("Hello World!/n");
  52.     return 0;
  53. }


输出截图:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值