STL之vector

我是linux ,在我的电脑中,vector的代码位于/usr/include/c++/4.4.4/bits/stl_vector.h, vector.tcc

先概括细节:

  1. vector仍是基本数组,也就是一个连续的内存块。
  2. 通过复制构造,opernator=函数来实现深复制,通过析构函数回收基本数组。
  3. 可以用resize来改变大小
  4. 提供operator[]来访问和修改内容

vector的实现是

它在stl_vector.h 中定义了一个

 

  _Vector_impl _M_impl;

 

 

 _Vector_impl的三个对象分别是数组的起始地址_M_start,  结束地址,还有vector容器的结束地址

 

 

 

 

因为有保留内存的存在。所以往vector里添加数据时,如果还有保留空间。就可以简单地将数据放入vector

 

 

当你试图去把一个元素插入内存已经满了的vector时,这个vector会分配具有更多 容量的新内存,从旧内存把它的元素拷贝到新内存,销毁旧内存里的元素,回收旧内存。然后它添加插入的元素.

例如

 

vector 重载了operator[],所以它虽然是一个类,但却可以像原生数组一样的用[]来访问。如data[3]

 

 

从这里也可以看到,迭代算法中的内存是连续的。

 

转载于:https://www.cnblogs.com/jackson-zhou/p/8044549.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值