首页 > 代码库 > 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实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。