zoukankan      html  css  js  c++  java
  • 使用多态性实现线性表(插入、删除、测长等)

     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
  • 相关阅读:
    H5及微信中唤起app的解决方案
    html5统计数据上报API:SendBeacon
    基于webpack4的react开发环境配置
    electron-vue开发爬坑指南
    利用git 进行多人协作开发
    js 性能优化利器:prepack
    各种渲染方式对比解析
    Nuxt.js部署应用的方式
    微信小程序--data的赋值与取值
    甘超波:什么是个人定位
  • 原文地址:https://www.cnblogs.com/acm-jing/p/10243721.html
Copyright © 2011-2022 走看看