Vector

来源:互联网 发布:mac英文全角 编辑:程序博客网 时间:2024/05/16 17:47
#ifndef _MYVECTOR_H#define _MYVECTOR_H// explicit 关键字的作用是怕隐式转换,针对单参构造函数// const 加在函数的最后面是告诉调用者这个函数不能改变该类的内部成员变量//#define CAPACITY (20)template<typename T>class Vector{public:// 构造explicit Vector(const int iInit = 0) :  m_iCount(iInit), m_iCapacity(iInit + CAPACITY){m_pVector = new T[m_iCapacity];}// 析构~Vector(){delete [] m_pVector;}// 拷贝构造Vector(const Vector & vParam) : m_pVector(NULL){operator=(vParam);}// =运算符const Vector&  operator=(const Vector & vParam) {if (this != &vParam){// 删除之前的内存delete [] m_pVector;// 其他变量的赋值m_iCapacity = vParam.m_iCapacity;m_iCount = vParam.m_iCount;// 创建内存m_pVector = new T[m_iCapacity];// 拷贝数据memcpy(m_pVector, vParam.m_pVector, sizeof(T) * m_iCount);}return *this;}public:int Size() const{return m_iCount;}int Capacity() const{return m_iCapacity;}public:// 增加容量void Reserve(int iNewCapacity){int iOldCapacity = m_iCapacity;T *pOldVector = m_pVector;if(iNewCapacity > iOldCapacity){m_iCapacity = iNewCapacity;m_pVector = new T[iNewCapacity];memcpy(m_pVector, pOldVector, sizeof(T) * m_iCount);delete [] pOldVector;}}public:void push_back(const T& val){// 如果超过了容量if (m_iCount == m_iCapacity){Reserve(m_iCapacity + CAPACITY);}m_pVector[m_iCount++] = val;}void pop_back(){if (m_iCount > 0){m_iCount--;}}public:T& operator[](int iIndex){return m_pVector[iIndex];}const T& operator[](int iIndex) const{return m_pVector[iIndex];}public:typedef T* Iterator;typedef const T* Const_Iterator;Iterator Begin(){return m_pVector;}Iterator End(){return (m_pVector + m_iCount);}Const_Iterator Begin() const{return m_pVector;}Const_Iterator End() const{return (m_pVector + m_iCount);}private:enum{CAPACITY = 20};private:int m_iCount;int m_iCapacity;T *m_pVector;};#endif

原创粉丝点击