第三章 表,栈和队列
2016-04-25 20:05
323 查看
3.4 Vector容器的C++实现
#include<string> #include<algorithm> #include<iostream> using namespace std; template<typename Object> class Vector { public: explicit Vector(int initSize=0) :theSize(initSize),theCapacity(initSize+SPARE_CAPACITY) { 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.size(); theCapacity =rhs.theCapacity; objects=new Object [capacity()]; for (int i = 0; i < size(); i++) { objects[k]=rhs.objects[k]; } } return *this; } void resize(int newSize) { if (newSize>theCapacity) { reserve(newSize*2+1); } theSize=newSize; } void reserve(int newCapacity) { if (newCapacity<theSize) { return; } Object *oldArray=objects; objects=new Object [newCapacity]; for (int i = 0; i < theSize; ++i) { objects[k]=oldArray[k]; } theCapacity=newCapacity; delete [] oldArray; } Object & operator[](int index) { return objects; } const Object &operator[](int index)const {return objects[index];} bool empty()const {return size()==0;} int size()const {return theSize;} int capacity()const {return theCapacity;} void push_back(const Object &x) { if (theSize == theCapacity) { reserve(2*theCapacity+1); } objects[theSize++]=x; } void pop_back() { theSize--; } const Object &back()const {return objects[theSize-1];} typedef Object *iterator; typedef const Object *const_iterator; iterator begain() {return &objects[0];} const_iterator begain()const {return &objects[0];} iterator end() {return &objects[size()];} const_iterator end()const {return &objects[size()];} enum { SPARE_CAPACITY=16; }; private: int theSize; int theCapacity; Object *objects; }
相关文章推荐
- 程序员的自我修养_之二_曾国藩的“大悔大悟”
- CentOS 6.5环境使用ansible剧本自动化部署Corosync + pacemaker环境及corosync常用配置详解
- LeetCode OJ 110. Balanced Binary Tree
- 心得体会
- 错排公式
- nodejs完整登陆交互
- 试试Linux下的ip命令,ifconfig已经过时了
- linux 虚拟机详细搭建过程
- Codeforces 669D
- 数组
- linux读写锁
- 云存储及其分布式文件系统
- R语言︱机器学习模型评价指标+(转)模型出错的四大原因及如何纠错
- 机器人正催生社会戾气?
- 《清单革命》
- 每日Scrum--No.7
- poj2955Brackets区间dp(括号匹配)
- mysql服务不能启动,解决方法
- 杭州--4.25
- 线性代数(笔记二) MIT公开课(来源网易云课堂)