首页 > 代码库 > STL vector的简单实现
STL vector的简单实现
STL中的Vector相对关联容器来说比较容易实现,其实际上就是一个动态数组的概念。此代码只实现了类的几个简单的功能,因为Vector的迭代器比较特殊(其实就是×T)故而此处的代码也很简略。代码如下:
#include<iostream> using namespace std; template<class T> class myVector{ public: typedef T value_type; typedef value_type* iterator; myVector():size(0),capacity(0){vec=new T[1];} explicit myVector(int _size):size(0),capacity(_size){ vec= new value_type[_size]; } myVector(int _size,T value):size(_size),capacity(_size) { vec= new value_type[_size]; for(int i=0;i<_size;i++) { vec[i]=value; } } myVector(const myVector&rhs) { capacity=rhs.cap(); size=rhs.count(); vec= new value_type[size]; iterator pos=rhs.begin(); int k=0; while(pos!=rhs.end()) { vec[k++]=*pos++; } } iterator *begin(){return &vec[0];} iterator *end(){return &vec[size];} ~myVector(){delete []vec; } void push_back(T value) { if(capacity==size) { if(capacity==0) { capacity=2; }else{ capacity=capacity*2; } T *oldArray=vec; vec=new value_type[capacity+1]; for(int i=0;i<size;i++) { vec[i]=oldArray[i]; } vec[size++]=value; delete []oldArray; }else{ vec[size++]=value; } } void fun() { T *p=vec; cout<<vec<<" "<<p<<endl; vec=new T[capacity]; cout<<vec<<endl; delete []p; } int count(){return size;} int cap(){return capacity;} void print(){ for(int i=0;i<size;i++) cout<<vec[i]<<" "; cout<<endl; } private: T *vec; int size; int capacity; }; int main() { myVector<int> my; my.push_back(5); my.push_back(6); my.push_back(7); my.push_back(11); my.print(); }
此段代码值得注意的是在整个数组空间迁移的时候,若之前的capacity为0时delete[]oldArray会出现问题。因为此时的oldArray压根还在编译器中不是以数组形式存放,若以数组形式释放便会报错。此处采取类初始化给vec一个1的实际空间是为避免此问题。
STL vector的简单实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。