【STL序列式容器】剖析vector


C++语言本身提供了一个序列式容器 arrayarray静态空间,一旦配置了就不能改变,类似于 C语言的 数组

vector数据安排以及操作方式array很像,但vector动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。

vector的迭代器

vector的嵌套型别定义如下:

template <class T, class Alloc = alloc>
class vector {
   
public:
    typedef T value_type;
    typedef value_type *pointer;
    typedef value_type *iterator; // vector的迭代器是普通指针
    typedef value_type &reference;
    typedef size_t size_type;
    typedef ptrdiff_t difference_type;
};

allocSGI STL的空间配置器。

vector维护的是一个连续线性空间,因此不论其元素型别如何,普通指针都可以作为vector的迭代器而满足所有必要条件,因为vector迭代器所需要的操作行为,如operator*operator->operator++operator--operator+=operator-=,普通指针天生都具备,所以vector提供的是Random Access Iterators

vector<int>::iterator ivite;    // ivite的类型是int*
vector<Shape>::iterator svite;  // svite的类型是Shape*

vector的数据结构

vector采用线性连续空间存储数据,它以两个迭代器startfinish分别指向配置得来的连续空间中已被使用的范围,并以迭代器end_of_storage指向整个配置空间的尾端

template <class T, class Alloc = alloc>
class vector {
   
protected:
    iterator start;           // 目前使用空间的头
    iterator finish;          // 目前使用空间的尾
    iterator end_of_storage;  // 目前可用空间的尾
};

finish等于end_of_storage时,便是满载。下次再新增元素时,整个vector就得另觅居所

如图所示,vector里保存了6个整型,已配置但未使用的空间里可以再存放两个元素。
在这里插入图片描述
使用这三个迭代器,便可轻松访问vector的元素,获取vector的容量和大小。

template <class T, class Alloc = alloc>
class vector {
   
public:
    iterator begin() {
    return start; }
    iterator end() {
    return finish; }
    size_type size() const {
    return size_type(end(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值