1. 动态空间增加不是单纯地增加大小,而是在新空间上进行拷贝操作。2. 空间配置后所有指向原来vector的迭代器就会失效。** 04 vector的迭代器 虽然迭代器的结构我们还没有探究,但是由于vector维护的是一个连续线性的空间,所以一些需要的操作如*,->,++,--,+=,-=,普通指针都可以满足。所以vector的迭代器...
可以看到在vector的头部我们具有: template <class T, class Alloc = alloc>//Alloc:第二级空间配置器 class vector { protected: // simple_alloc 空间配置器 ->data_allocator typedef simple_alloc<value_type, Alloc> data_allocator; ... } 所以Alloc默认为第二级空间配置器,然后在simple_alloc中输入其元...
template<typename_Tp,typename_Alloc>struct_Vector_base{typedeftypename__gnu_cxx::__alloc_traits<_Alloc>::templaterebind<_Tp>::other _Tp_alloc_type;typedeftypename__gnu_cxx::__alloc_traits<_Tp_alloc_type>::pointer pointer;struct_Vector_impl_data{// _Vector_impl_data的定义见第二节};struct_...
构造vector,基类的构造函数_MyBase()构造完毕,接下来会构造vector的数据成员,而vector内部只有3个指针,是不需要调用对象成员的构造函数(构造一个类,首先构造基类,再构造对象成员,最后是调用类构造函数本身) 构造vector,基类的构造函数_MyBase()构造完毕,构造vector的数据成员完毕,接着构造函数体Buy(0) Buy(0)的意思...
STL源码之vector 1. SGI的vector SGI stl vector继承子一个基类: template<typename _Tp, typename _Alloc = std::allocator<_Tp> > class vector : protected _Vector_base<_Tp, _Alloc> 在基类中定义了基本的一些操作,并且封装了了vector所需要的基本的三个指针: ...
一、vector概述 vector的使用语法可以参考文章之前的几篇文章,总的来说:vector是可变大小数组 特点: 支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢 元素保存在连续的内存空间中,因此通过下标取值非常快 在容器中间位置添加或删除元素非常耗时 一旦vector内存不足,重新申请内存之后,和原vector相关的指针,引用...
} vector() : start(0), finish(0), end_of_storage(0) {} vector(size_type n, const T& value) { fill_initialize(n, value); } vector(int n, const T& value) { fill_initialize(n, value); } vector(long n, const T& value) { fill_initialize(n, value); } explicit vector(size...
当我们以push_back() 将新元素安插入于vector尾端时,该函式首先检查是否还有备用空间,如果有就直接在备用空间上建构元素,并调整迭代器finish,使vector变大。如果没有备用空间了,就扩充空间(重新配置、搬移数据、释放原空间) push_back()原型如下: 代码语言:javascript 复制 代码语言:javascript 复制 void push_back...
从源码的实现来看,其实vector是一个模板派生类,也就是说,它首先是一个模板类,这一点我们应该都猜得到,毕竟我们使用的时候都是使用形如vector<int>这样的形式来进行声明一个vector对象的,其次它是一个派生类,它的基类是_Vector_base,所以我们首先来看一下这个基类的实现。
重点源码理解 1.迭代器内部型别 下面我们来看看STL源码里面是如何来定义迭代器的吧。 template<class T,class Alloc=alloc>class vector{public:// vector 的嵌套型别定义typedefT value_type;typedefvalue_type*iterator;// 迭代器本身是一个模板类的对象typedefvalue_type&reference;...}; ...