当前位置:   article > 正文

简谈vector的底层实现_vector底层实现

vector底层实现

一、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())//判断申请空间大小是否超
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号