首页 > 其他分享 >STL的vector容器的实现原理是什么,他是怎么扩容的?详细图解展示!!!

STL的vector容器的实现原理是什么,他是怎么扩容的?详细图解展示!!!

时间:2023-04-28 18:44:43浏览次数:48  
标签:扩容 STL 编译器 vector 数组 空间 原理 图解

实现原理:

  vector底层实现原理是一维数组。

  vector通过一个连续的数组存放元素,如果这个数组的容量已满,再插入数据的时候,就要去申请一块更大的内存,然后把原来数组的数据复制到新数组中来,再释放原来数组的内存。

  那么申请(扩容)多大的空间的比较合适呢?

    如果我们扩容的空间太小了,比如原来的数组的容量是10000个数据,我们只扩容了10001了,那么我们再插入数据的时候,又要去去扩容,进行多次复制和释放,那么效率太低。

    如果我们扩容的空间太大了,比如原来数组的容量是10000个元素,我们扩容了50000的空间,那么我们后面可能很少扩容了,但我们可能只需要插入很少的数据,那就太浪费空间了。

    所以综合效率和空间的有效利用,可以进行适当的扩容。比如vs中扩容是1.5倍,g++编译器的扩容是2倍。

    vs中是1.5倍:   

   在g++编译器中扩容是2倍:

 

标签:扩容,STL,编译器,vector,数组,空间,原理,图解
From: https://www.cnblogs.com/py369/p/17362947.html

相关文章

  • vector,list,deque,set,map of STL
    List封装了链表,Vector封装了数组,list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]。Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。List对于随机访问速度慢得多,因为可能要......
  • whistle使用
    whistle抓包笔记安装启动Mac或Windows系统可以采用一键安装:https://juejin.cn/post/7096345607740063775whistle安装过程需要以下步骤(缺一不可):安装Node安装whistle启动whistle配置代理安装根证书1.安装Nodewhistle支持v0.10.0以上版本的Node,为获取更好的性能,推......
  • Spring 3.x MVC 入门1 -- 图解MVC整体流程
    Springmvc的生命周期开始使用springmvc之前,我们必须需要了解下SPRINGMVC的流程,如下图: 在看下图之前的一些说明:(下面介绍的HandlerMapping,HandlerAdapter,HandlerExceptionResovler,ViewResolver都有个order属性,因为这些接口每一个都可以注册多个实现,order代表他们的执行顺序......
  • vector
    vector使用 1.头文件#include<vector>2.初始化如果vector的元素类型是int,默认初始化为0;如果vector元素类型为string,则默认初始化为空字符串。vector<int>v1;vector<father>v2;vector<string>v3;vector<vector<int>>;//注意空格。这里相当于二维数组inta[n][n];vecto......
  • 4/27打卡 stl初识vector
    1#include<iostream>2#include<vector>3usingnamespacestd;456voidtest()7{8vector<vector<int>>v;9vector<int>v1;10vector<int>v2;11vector<int>v3;12vector<in......
  • 开心档之C++ STL 教程
    C++STL教程在前面的章节中,我们已经学习了C++模板的概念。C++STL(标准模板库)是一套功能强大的C++模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。C++标准模板库的核心包括以下三个组件:组件描述容......
  • mybatis与jstl异常汇总
    1,roblemaccessing/moviePlay/goMoviePlay/1/1/1.Reason:  /WEB-INF/views/workdetail.jsp(92,15)PWC6031:Unterminated<c:settagCausedby:org.apache.jasper.JasperException:/WEB-INF/views/workdetail.jsp(92,15)PWC6031:Unt......
  • 高精度模板 大数减大数 可变数组vector实现
    vector<int>Sub(vector<int>&A,vector<int>&B)//这里默认长数减去短数{vector<int>C;//结果向量intT=0;//上一位借位标志位for(inti=0;i<A.size();i++){T=A[i]-T;if(i<B.size())T-=B[i];//检......
  • C++STL学习经典
    C++语言学习之STL的组成STL有三大核心部分:容器(Container)、算法(Algorithms)、迭代器(Iterator),容器适配器(containeradaptor),函数对象(functor),除此之外还有STL其他标准组件。通俗的讲:容器:装东西的东西,装水的杯子,装咸水的大海,装人的教室……STL里的容器是可容纳一些数据的模板类。算法:......
  • 唯品会季报图解:运营利润环比下降21.5%
    腾讯科技唯品会 (纽交所证券代码:VIPS)今日发布财报。财报显示,唯品会第二季度净营收8.294亿美元,较上年同期增136.1%;归属于唯品会净利润2640万美元,较上年同期增长192.1%。唯品会董事长兼首席执行官沈亚称,乐峰网第二季度贡献近200万的订单和超过130万的活跃用户。随着移动日益成为......