使用多态性实现线性表(插入、删除、测长等)
1 #include"iostream" 2 #include"stdio.h" 3 #include"algorithm" 4 #include"map" 5 using namespace std; 6 template<typename T> 7 struct TContainer 8 { 9 virtual void push(const T&)=0; 10 virtual void pop()=0; 11 virtual const T& begin()=0; 12 virtual const T& end()=0; 13 virtual size_t size()=0; 14 }; 15 template<typename T> 16 struct TVector:public TContainer<T> 17 { 18 static const size_t _step=100; 19 TVector() 20 { 21 _size=0; 22 _cap=_step; 23 buf=0; 24 re_capacity(_cap); 25 } 26 ~TVector() 27 { 28 free(buf); 29 } 30 void re_capacity(size_t s) 31 { 32 if(!buf) 33 buf=(T*)malloc(sizeof(T)*s); 34 else 35 buf=(T*)realloc(buf,sizeof(T)*s); 36 } 37 virtual void push(const T& v) 38 { 39 if(_size>=_cap) 40 { 41 re_capacity(_cap+=_step); 42 } 43 buf[_size++]=v; 44 } 45 virtual void pop() 46 { 47 if(_size) 48 _size--; 49 } 50 virtual const T& begin() 51 { 52 return buf[0]; 53 } 54 virtual const T& end() 55 { 56 if(_size) 57 return buf[_size-1]; 58 } 59 virtual size_t size() 60 { 61 return _size; 62 } 63 const T& operator[](size_t i) 64 { 65 if(i>=0&&i<_size) 66 return buf[i]; 67 } 68 private: 69 size_t _size; 70 size_t _cap; 71 T* buf; 72 }; 73 74 int main() 75 { 76 TVector<int>v; 77 for(int i=0;i<100;i++) 78 v.push(i); 79 for(int i=0;i<100;i++) 80 cout<<v[i]<<endl; 81 return 0; 82 }