前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vector重写

vector重写

作者头像
对弈
发布2019-09-04 15:55:18
1.2K0
发布2019-09-04 15:55:18
举报
文章被收录于专栏:用户3029758的专栏

int main() {     Vector<int> vec;     //添加元素     vec.push_back(1);     vec.push_back(2);     vec.push_back(3);     vec.push_back(3);     vec.toString();          //弹出最后一个元素     vec.pop_back();     vec.toString();     //直接取某个元素     const int a = vec[0];     cout<<"vec[1]:"<<vec[1]<<endl;     return 0; }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156

#include "stdafx.h" #include <iostream> using namespace std; //template 关键字后接模板形参表,表明这里定义的Vector是一个类模板,而不是一个类, //Vector<int>才是一个类.函数模板也是一样,它们都只是一个"公式". template <typename Object> class Vector { public:     static const int SPARE_CAPACITY = 16;          //将构造函数声明为explicit ,是为了抑制由构造函数定义的隐式转换     /*          构造函数的初始化列表.关于构造函数的初始化列表, 有两个要点.第一, 即使列表为空, 没有初始化式,         构造函数也会先初始化每个成员再进入函数体, 这时初始化的规则与初始化变量相同,         由此得知第二个要点:如果类的成员本身是一个没有默认构造函数的类类型, 或者成员是const、引用类型,         这样的成员必须在构造函数初始化列表中进行初始化     */     explicit Vector(int initSize = 0) :theSize(initSize), theCapacity(initSize + SPARE_CAPACITY)     {         //new返回一个指向Object类型数组的指针         objects = new Object[theCapacity];     }     Vector(const Vector& rhs) :objects(NULL)     {         operator=(rhs);     }     ~Vector()     {         delete[] objects;     }     const Vector& operator=(const Vector& rhs)     {         if (this != &rhs)         {             delete[] objects;             theSize = rhs.theSize;             theCapacity = rhs.theCapacity;             objects = new Object[theCapacity];             for (int k = 0; k < theSize; k++)             {                 objects[k] = rhs.objects[k];             }         }         return *this;     }     /*         由于成员函数的定常性是(即函数名后是否有const关键字)是签名的一部分,         因此我们可以使用访问函数的operator[]版本返回const引用,而修改函数版本返回一般引用     */     Object& operator[](int index)     {         if (index < 0 || index >= theSize)         {             return objects[0];         }         cout << "--Object& operator[](int index)"<<endl;         return objects[index];     }     const Object& operator[](int index)const     {         cout << "** const Object& operator[](int index)const" << endl;         return objects[index];     }     //检测是否需要扩容     void reserve()     {         reserve(theSize);     }     void reserve(int newSize)     {         if (theCapacity > newSize)         {             return;         }         int newCapacity = theCapacity * 2 + 1;         Object* oldArr = objects;         objects = new Object[newCapacity];         for (int k = 0; k < theSize; k++)         {             objects[k] = oldArr[k];         }         theCapacity = newCapacity;         delete[] oldArr;     }     int size()const     {         return theSize;     }     int capacity()const     {         return theCapacity;     }     bool empty()const     {         return theSize == 0;     }     void resize(int newSize)     {         reserve(newSize);         theSize = newSize;         theCapacity = newSize;     }     void push_back(const Object& obj)     {         reserve();      //检测容器大小         objects[theSize++] = obj;     }     void pop_back()     {         theSize--;     }     const Object & back()const     {         return objects[theSize - 1];     }     Object* begin()     {         return &objects[0];     }     Object* end()     {         return &objects[theSize];     }          const Object* end()const     {         return&objects[theSize];     }     void toString()     {         cout << "Vecot长度:" << size() << ",容量:" << capacity() << endl;         for (int i = 0; i < theSize; i++)         {             cout << "objects[" << i << "]:" << objects[i] << endl;         }     }     typedef Object* iterator;     typedef const Object* const_iterator; private:     int theSize;     int theCapacity;     Object* objects; };

声明:本文为原创,作者为 对弈,转载时请保留本声明及附带文章链接:http://www.duiyi.xyz/vector%e9%87%8d%e5%86%99/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档