STL vector的簡單實現

來源:互聯網
上載者:User

標籤:c++   stl   

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個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.