STL序列式容器之vector

一、概述

vector构造出一个动态数组,本身是将元素置于动态数组中加以管理的抽象概念。使用vector之前必须含入头文件<vector>,vector是一个定义于namespace std内的template

namespace std {
    template <class T,
              class Allocator = allocator<T> >
    class vector;
}

vector将元素复制到内部动态数组中,vector的迭代器是随机存取迭代器,所以支持随机存取。在末端添加、删除元素时,vector的性能相当好。但是在前端或者中部安插或删除元素,性能就不怎么好了,因为操作点之后的每一个数据都要移动到另一个位置。vector性能优异的重要原因就是配置比其容纳元素所需更多的内存。vector的容量很重要
    1. 一旦内存重新配置,和vector相关的引用、指针、迭代器都会失效;
    2. 内存重新配置很耗时间。

二、vector的内部结构

vector类内通过三个保护成员的迭代器变量维护内存空间的使用:

template <class T, class Alloc = alloc>
class vector {
//省略其他成员
protected:
    iterator start;            //表示目前使用空间的头
    iterator finish;           //表示目前使用空间的尾
    iterator end_of_storage;   //表示目前可用空间的尾
}

新增加元素时,如果超过当时容量,则容量会扩充至两倍。如果两倍容量仍然不够,就扩张至足够大的容量。所谓动态增加大小,并不是在原空间之后接续新空间(因为无法保证原空间之后有可用空间),而是以原大小的两倍另外配置一块较大的空间,然后将原空间内容拷贝过来,然后在原内容之后构造新元素,释放原空间。一旦引起空间重新配置,指向原空间的所有迭代器就失效了!

三、vector的操作函数

1. 构造、拷贝和析构

操作 效果
vector<Elem> c 产生一个存放Elem类型元素的空vector
vector<Elem> c1(c2) 产生一个与c2同型的vector,每个元素都被复制
vector<Elem> c(n) 产生一个含有n个元素,以default构造函数产生元素的vector
vector<Elem> c(n,elem) 产生一个含有n个elem元素的vector
vector<Elem> c(beg,end) 产生一个以区间[beg,end]内元素为初值的vector
c.~vector<Elem>() 销毁所有元素,释放内存


2. 非变动性操作

操作 效果
c.size() 返回元素个数。
c.empty() 判断容器大小是否为0。
c.max_size() 返回整个内存空间可容纳元素最大数量
c.capacity() 返回重新分配空间前容器所
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值