简谈vector的底层实现

一、vector 概述vector的数据安排方式和操作方式与array十分相似。两者的唯一区别是array是静态空间,空间一旦配置就无法改变,如果一定需要改变,需要用户自己重新开辟一个新的大小空间,然后原有空间上的数据一 一拷贝到新的空间,然后将原有空间释放掉。而vector是一个动态空间,在元素的不断加入的过程中,如果空间满了,它会自行扩充空间。vector实现的关键技术在于其对大小的控制以及重新配置时的数据移动效率。二、vector的实现原理vector定义了三个指针start(表示目前使用空
摘要由CSDN通过智能技术生成

一、vector 概述

vector的数据安排方式和操作方式与array十分相似。两者的唯一区别是array是静态空间,空间一旦配置就无法改变,如果一定需要改变,需要用户自己重新开辟一个新的大小空间,然后原有空间上的数据一 一拷贝到新的空间,然后将原有空间释放掉。而vector是一个动态空间,在元素的不断加入的过程中,如果空间满了,它会自行扩充空间。
vector实现的关键技术在于其对大小的控制以及重新配置时的数据移动效率。

二、vector的实现原理

  1. vector定义了三个指针start(表示目前使用空间的头)、finish(表示目前使用空间的尾)、end_of_storage(表示目前可用空间的尾)。vector中判断是否要开辟空间的条件就是“finish
    == end_of_storage”,但满足这个条件的时候用户还想插入新的元素就需要调用reserve函数开辟空间来存放新的元素。
  2. reserve函数的实现
    2.1原理:首先判断请求的空间大小是否超过现有空间大小。
    是则进行一系列处理:
    (1)开辟新空间 、(2)将原有空间的数据一一移动到新空间上、(3)释放原有空间、(4)将三个指针重置
    否则不做任何处理
    2.2代码:
 void Reserve(size_t n)
{
	int size = Size();
	if (n > Capacity())//判断申请空间大小是否超
  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值