STL之vector

10 篇文章 0 订阅

容器、结构与分类 

容器  :所有的容器都维护着两个迭代器,分别指向头和尾

STL容器是将运用最广的数据结构实现出来

根据数据在容器中的排列特性,将这些数据结构分为序列式和关联式两种

序列式容器(advlsqp)array\deque\vector\list\queue\priority-queue

Array

连续空间,其迭代器就是指针。

 

 

  • Vector

Vector<int> s(n,value);

vector的数据安排与操作方式与array很相似,维护的是一个连续线性空间。区别是空间的运用灵活性。

array是静态空间,一旦配置了大小就不能改变

vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素

 

vector 原始对象本身大小为12(32位)对应3根指针。

在VS中可用sizeof(vector<T>)来输出查看。

vector的数据结构:线性连续空间

它以两个迭代器start和finish分别指向配置得来的连续空间中目前已被使用的范围,注意finish指向的是最后一个元素后面那个元素。并以迭代器end_of_storage指向整块连续空间(含备用空间)的尾端。

 

vector实际配置的大小比会比客户端需求量更大一些,以备将来可能的扩充。即容量的观念

即一个vector的容量永远大于或等于其大小。一旦容量等于大小,便是满载,下次再有新增元素,整个vector就得容量扩张(重新配置所需空间、所有元素移动到新空间、释放原空间),工程浩大。

注意:对vector增加新元素时,如果超过了当时的容量,则容量会扩充至两倍。

 

vector的构造与内存管理:以constructor、push_back为例

构造函数之一:vector(size_type n,const T&value){fill_initialize(n,value);}

内存管理:当我们以push_back()将新元素插入于vector尾端时,该函数首先检查是否还有备用空间,如果有就直接在备用空间上构造元素,并调整迭代器finish,使vector增大。如果没有空间则扩充空间(重新配置所需空间、所有元素移动到新空间、释放原空间)。

注意:所谓动态增加空间并不是在原空间接续新空间(因为无法保证原空间之后还有可供配置的空间),而是以原大小的两倍另外配置一块较大的空间。

因此,对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就都失效了

 

 

 

vector的迭代器:

因为vector维护的是一个连续线性空间,所以普通指针就可以作为vector的迭代器,支持operator*、operator->、operator++、operator--等操作。vector支持随机存取.

成员函数:
vector(矢量)的常用成员函数:
begin()、end()、size()、capacity()、operator[]、front()、back()、push_back()、pop_back()、erase()、clear(){erase(begin(),end());}
vector的部分元素操作:pop_back、erase、clear、insert   P123


//将尾端元素拿掉,并调整大小
void pop_back(){
--finish;//将尾端标记往前移一格,表示将放弃尾端元素
destroy(finish);
}

//清除[first,last)中的所有元素
iterator erase(iterator first,iterator last)

//清除某个位置上的元素
iterator erase(iterator position)

//清除vector中的所有元素,与erase的第一种定义相同
void clear(){erase(begin(),end());

//在position 前方插入n个元素,元素初值为x
void vector<T,Alloc>::insert(iterator position,size_type n,const T&x)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值