使用多态性实现线性表(插入、删除、测长等)

 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 }
View Code
原文地址:https://www.cnblogs.com/acm-jing/p/10243721.html