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
- Vector 的简单实现 C++11
- c++vector简单实现
- c/c++ vector 的简单实现
- (C++)Vector 简单的底层实现
- 【STL C++】简单实现vector
- 简单vector 的实现
- Vector的简单实现
- 简单的vector实现
- vector的简单实现
- vector的简单实现
- Vector的简单实现
- vector的实现【C++】
- C++ vector 的简单实现
- c++ vector的简单实现
- fookwood的简单vector实现
- Vector的简单C++实现
- STL vector的简单实现
- vector的一种简单实现
- Kaggle比赛-Otto Group Product Classification-打败一半参赛队伍的简单解法
- activity launchMode
- 蓝桥杯 ALGO-90 出现次数最多的整数(水题、细节)
- UVA - 10003 - Cutting Sticks (区间DP)
- 93-Mac配置Apache服务器.
- Vector 的简单实现 C++11
- SecureCRT远程登陆Ubuntu出现 The remote system refused the connection.
- vc调用vega prime运行特别卡,帧率低的问题
- 字符和字节的区别
- 计算机编码简介(ASCII、ANSI、EBCDIC、Unicode)
- CRC计算方法与实例
- Go资料汇总
- 用递归实现n选m排列
- 北美18名校的数据挖掘,数据分析,人工智能及机器学习课程汇总