浅析STL中vector容器的用法/特性/实现

vector 容器

vector 原意是向量。在C++中,是一种用起来像动态数组的模板类。在不同的编译器中,vector 的实现都不尽相同,侯捷老师主要介绍的是G2.9G4.9两个版本。

//G2.9中 vector类的声明
template<class _Tp, class _alloc>
class vector{
   
...
protected:
    iterator start;
    iterator finish;
    iterator end_of_storage;
};

vector . sizeof()

曾经有同学试图使用 sizeof() 来计算 vector 对象有多少个元素,可是得到的结果都是意料之外的 ( 因为他数组可能有十多个整形变量,但是sizeof()得到的结果居然是 12 或者 24)。

从源码中可以看到vector的成员变量只有三个类型为 iterator 的迭代器对象,分别名为start , finish , end_of_storage :

  • start : 指向所有内存空间开始的地址

  • finish : 指向所有内存空间使用的尾地址

  • end_of_storage : 指向所有内存空间结束的尾地址

vector 对象通过三个指针管理使用的内存空间,而实际的数据并不存储在 vector 对象中。这也就是 sizeof() 得不到想要的数组内存大小的原因。

vector . 内存成长

vector 我们在使用的时候都知道它是一个动态数组,那么这个动态就体现在了可以动态地插入,动态地删除。那么 vector 对象控制的内存空间应该分配多少大小才能满足动态地插入呢?

答案是未知。因为我们并不知道会动态插入多少数组,因此最好的方法是 : 内存空间动态增长。

规则 :

vector<int> res; //默认构造 start == finish == end_of_storage 不分配内存空间
// 成长方式
else{
   
  	const size_type old_size = size();
  	const size_type len = old_size != 0 ? 2 * old_size : 1; //下方第三点规则
}
  • res.size() == 0
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值