好了,本文的讲解到此为止,如有问题,欢迎提问。
图1 扩充后的vector内存结构
vector的数据结构
vector数据结构,采用的是连绝的线性空间,属于线性存储。他采用3个迭代器_First、_Last、_End来指向分配来的线性空间的不同范围,下面是声明3个迭代器变量的源代码。
template<class _Ty, class _A= allocator< _Ty> >class vector{
...protected:
iterator _First, _Last, _End;};
_First指向使用空间的头部,_Last指向使用空间大小(size)的尾部,_End指向使用空间容量(capacity)的尾部。例如:
int data[6]={3,5,7,9,2,4};
vector<int> vdata(data, data+6);
vdata.push_back(6);...
vector初始化时,申请的空间大小为6,存放下了data中的6个元素。当向vdata中插入第7个元素“6”时,vector利用自己的扩充机制重新申请空间,数据存放结构如图1所示:
vector的扩充机制:依照容器目下当今容量的一倍停止增长。vector容器分配的是一块连绝的内存空间,每次容器的增长,并不是在原有连绝的内存空间后再停止简单的叠加,而是重新申请一块更大的新内存,并把现有容器中的元素逐个复制过去,然后销毁旧的内存。这时原有指向旧内存空间的迭代器已经失效,所以当操作容器时,迭代器要及时更新。
简单描述一下。当插入第7个元素“6”时,vector发现自己的空间不够了,于是申请新的大小为12的内存空间(自增一倍),并将前面已稀有据复制到新空间的前部,然后插入第7个元素。此时_Last迭代器指向最后一个有效元素,而_End迭代器指向vector的最后有效空间位置。我们利用vector的成员函数size可以或许获得当前vector的大小,此时为7;利用capacity成员函数获取当前vector的容量,此时为12。
priorit北舞校花晒生活照y_queue
一种先进不必然先出的数据结构。priority_queue不答应对容器的遍历操作,只答应在容器的两端操作元素。priority_queue在定义中比queue多了一个数据成员_Pr comp,就是比较函子,用来列出出列顺序。
vector简介
vector是STL中最常见的容器,它是一种顺序容器,支持随机访问。vector是一块连绝分配的内存,从数据安排的角度来讲,和数组极端相似,不同的地方就是:数组是静态分配空间,一旦分配了空间的大小,就不可再改变了;而vector是动态分配空间,跟着元素的不断插入,它会依照自身的一套机制不断扩充自身的容量。
感谢:《C++编程要害路径——程序员求职指南》 支持一下