Vector 的简单实现 C++11

来源:互联网 发布:手机打卡软件 编辑:程序博客网 时间:2024/06/05 05:00
<pre name="code" class="cpp">/**********class templates Vector*************  int size() const:               return the numbers of elements in the container  void clear():                             removes all elements from the container.  bool empty() const:                       returns true if the container contains no elements,and false otherwise.  void push_back(const Obeject& x):         adds x to the end of the list.  void pop_back():                          removes the objects at the end of the list.  const Object &back() const:               returns the object at the end of the list  const Object &front() const:              returns the object at the front of the list.  Object& operator[](int idx):              return the object at index idx in the vector,with no bounds-checking  Object& at(int idx):                      return the object at index idx in the vector,with bounds-checking   int capacity() const:         returns the internal capacity of the vector.  void reserve(int newCapacity):            sets the new capacity.  iterator begin():    const_iterator begin():                returns an appropriate iterator representing the first in the container  const_iterator end():  iterator end():                           returns an appropriate iterator representing the endmarker in the container  ******************************************/#ifndef VECTOR_H#define VECTOR_H#include <algorithm>#include <iostream>#include <stdexcept>#include "dsexceptions.h"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):theSize(rhs.theSize),theCapacity(rhs.theCapacity),objects(nullptr){objects=new Object[theCapacity];for(int k=0;k<theSize;++k)objects[k]=rhs.objects[k];}const Vector &operator=(const Vector &rhs){if (this !=&rhs){delete [] objects;theSize=rhs.size();theCapacity=rhs.theCapacity;objects=new Object[capacity()];for(int k=0;k<size();++k)objects[k]=rhs.objects[k];}return *this;}~Vector(){delete []objects;}Vector(Vector &&rhs):theSize(rhs.theSize),theCapacity(rhs.theCapacity),objects(rhs.objects){rhs.objects=nullptr;rhs.theSize=0;rhs.theCapacity=0;}Vector &operator=(Vector &&rhs){std::swap(theSize,rhs.theSize);std::swap(theCapacity,rhs.theCapacity);std::swap(objects,rhs.objects);return *this;}void resize(int newSize){if(newSize>theCapacity)reserve(newSize*2);theSize=newSize;}void reserve(int newCapacity){if (newCapacity<theSize)return;Object *newArray=new Object[newCapacity];for(int k=0;k<theSize;++k)newArray[k]=std::move(objects[k]);theCapacity=newCapacity;std::swap(objects,newArray);delete [] newArray;}Object &operator[](int index){return objects[index];}Object &at(int index){//check indexif(index<0||index>=size())                   throw ArrayIndexOutOfBoundsException();return objects[index];}const Object &operator[](int index) const{        //check indexif(index<0||index>=size())                   throw ArrayIndexOutOfBoundsException();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 push_back(Object &&x){if (theSize==theCapacity)reserve(2*theCapacity+1);objects[theSize++]=std::move(x);}void pop_back(){if(empty())throw UnderflowException();--theSize;}const Object& back() const{ if(empty())throw UnderflowException();return objects[theSize--];}typedef Object* iterator;typedef const Object* const_iterator;iterator begin(){return &objects[0];}const_iterator begin() const{return &objects[0];}iterator end(){return &objects[size()];}const_iterator end() const {return &objects[size()];}static const int SPARE_CAPACITY=16;private:int theSize;int theCapacity;Object *objects;}; #endif


</pre><pre name="code" class="cpp">
                                             
0 0
原创粉丝点击