这是一个自适应大小的Array的类型(不重复节点)
功能:
加入节点
删除节点
返回缓冲区
返回缓冲需大小
类定义与实现:
使用方法:
输出截图:
功能:
加入节点
删除节点
返回缓冲区
返回缓冲需大小
类定义与实现:
- #ifndef __MYVECTOR_H__
- #define __MYVECTOR_H__
- #include "memory.h"
- //加入一个不重复的节点到vector中,自动更新内容大小
- template <class T> class MyVector{
- public:
- void Add(T t)
- {
- for(int i=0;i<_num;i++) if(_pBuffer[i] == t) return;
- if(_num+1>_size)
- {
- T *p = new T[_size*2];
- memcpy(p,_pBuffer,sizeof(T)*_size);
- delete[] _pBuffer;
- _pBuffer = p;
- _size = 2*_size;
- }
- _pBuffer[_num] = t;
- _num++;
- }
- void Delete(T t)
- {
- for(int i=0;i<_num;i++)
- {
- if(_pBuffer[i] == t)
- {
- for(int j=i;j<_num;j++)
- _pBuffer[j]=_pBuffer[j+1];
- _num--;
- }
- }
- }
- T* GetBuffer(){return _pBuffer;}
- int Count(){return _num;}
- int BufferSize(){return _size;}
- public:
- MyVector(int sz = 1):_num(0) {_size = sz; _pBuffer = new T[_size];}
- ~MyVector(){delete[] _pBuffer;}
- private:
- int _num;
- int _size;
- T* _pBuffer;
- };
- //加入一个不重复的节点与其相对应的节点到vector中,自动更新内容大小
- template <class T,class T2> class MyVector2{
- public:
- void Add(T t,T2 t2)
- {
- for(int i=0;i<_num;i++) if(_pBuffer[i] == t) return;
- if(_num+1>_size)
- {
- T *p = new T[_size*2];
- T2 *p2 = new T2[_size*2];
- memcpy(p,_pBuffer,sizeof(T)*_size);
- memcpy(p2,_pBuffer2,sizeof(T2)*_size);
- delete[] _pBuffer;
- delete[] _pBuffer2;
- _pBuffer = p;
- _pBuffer2 = p2;
- _size = 2*_size;
- }
- _pBuffer[_num] = t;
- _pBuffer2[_num] = t2;
- _num++;
- }
- void Delete(T t)
- {
- for(int i=0;i<_num;i++)
- {
- if(_pBuffer[i] == t)
- {
- for(int j=i;j<_num;j++)
- {
- _pBuffer[j]=_pBuffer[j+1];
- _pBuffer2[j]=_pBuffer2[j+1];
- }
- _num--;
- }
- }
- }
- T* GetBuffer(){return _pBuffer;}
- T2* GetBuffer2(){return _pBuffer2;}
- int Count(){return _num;}
- int BufferSize(){return _size;}
- public:
- MyVector2(int sz = 1):_num(0) {_size = sz; _pBuffer = new T[_size];_pBuffer2 = new T2[_size];}
- ~MyVector2(){delete[] _pBuffer;delete[] _pBuffer2;}
- private:
- int _num;
- int _size;
- T* _pBuffer;
- T2* _pBuffer2;
- };
- #endif
使用方法:
- #include "myvector.h"
- void printvect(MyVector<int>& v)
- {
- int num = v.Count();
- int sz = v.BufferSize();
- int* pbuffer = v.GetBuffer();
- printf("缓冲:%d个|实际:%d个|",sz,num);
- for(int i=0;i<num;i++)
- {
- printf("%d ",pbuffer[i]);
- }
- printf("/n");
- }
- void printvect2(MyVector2<int,float>& v)
- {
- int num = v.Count();
- int sz = v.BufferSize();
- int* pbuffer1 = v.GetBuffer();
- float* pbuffer2 = v.GetBuffer2();
- printf("缓冲:%d个|实际:%d个|",sz,num);
- for(int i=0;i<num;i++)
- {
- printf("%d:%f ",pbuffer1[i],pbuffer2[i]);
- }
- printf("/n");
- }
- int main(int argc, char* argv[])
- {
- MyVector2<int,float> vec;
- printvect2(vec);
- vec.Add(1,0.1);
- printvect2(vec);
- vec.Add(2,0.2);
- printvect2(vec);
- vec.Add(3,0.3);
- printvect2(vec);
- vec.Add(4,0.4);
- printvect2(vec);
- vec.Delete(5);
- printvect2(vec);
- vec.Delete(3);
- printvect2(vec);
- vec.Add(4,0.4);
- printvect2(vec);
- vec.Add(7,0.7);
- printvect2(vec);
- vec.Add(8,0.88);
- printvect2(vec);
- vec.Add(9,0.99);
- printvect2(vec);
- printf("Hello World!/n");
- return 0;
- }
输出截图:
