首页 > 代码库 > vector实现

vector实现

typedef int size_type;/*vector维护的是一个连续线性空间,提供的迭代器是Random Access Iterators即普通指针*/template <class T,class Alloc=alloc>class vector{protected:    iterator start;//目前使用空间的头    iterator finish;//目前使用空间的尾    iterator end_of_storage;//目前可用空间的尾public:    void push_back(const T& x);    void insert_aux(iterator position, const T& x);    int size()const{ return int(end() - begin()); }};/*vector动态增加大小,并不是在原空间之后开辟新空间,因为无法保证原空间之后尚有可供配置的空间,而是以原大小的两倍另外配置一块较大空间,然后将原内容拷贝过来,然后才开始在原内容之后构造新元素,并释放原空间*/template<class T,class Alloc=alloc>void vector::push_back(const T& x){    if (finish != end_of_storage)    {        construct(finish, x);        ++finish;    }    else//已无备用空间        insert_aux(end(), x);}template<class T, class Alloc = alloc>void vector<T, Alloc>::insert_aux(iterator position, const T& x){    const size_type old_size = size();    const size_type len = old_size != 0 ? 2 * old_size : 1;    /*    配置原则:若原空间大小为0,则配置一个元素大小,否则配置原大小的两倍    前半段用来放置原数据,后半段用来放置新数据    */    //data_allocator为vector专有的空间配置器    iterator new_start = data_allocator::allocate(len);    iterator new_finish = new_start;    //将原vector的内容拷贝到新vector    new_finish = uninitialized_copy(start, position, new_start);    //为新元素设定初值x    construct(new_finish, x);    ++new_finish;    //析构并释放原vector    destroy(begin(), end());    deallocate();    //调整迭代器    start = new_start;    finish = new_finish;    end_of_storage = new_start + len;}

 

vector实现