weixin_44579584 2022-04-23 22:18 采纳率: 100%
浏览 78
已结题

vector 扩容机制是怎么回事

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法

vector 扩容机制是怎么回事,能简单说说原理吗

我想要达到的结果

vector 扩容机制是怎么回事,能简单说说原理吗

  • 写回答

1条回答 默认 最新

  • bostonAlen 2022-04-23 22:31
    关注

    在vector类中作用为在vector尾部加入一个数据;即vector的size属性加1,但此时还要判断 (size+1)与capacity的关系,如果(size+1)>capacity,则说明集合已经满了,在新增数据的时候,就要分配一块更大的内存,将原来的数据复制过来,释放之前的内存,再插入新增的元素;
    对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就都失效了 ;
    初始时刻vector的capacity为0,塞入第一个元素后capacity增加为1;
    不同的编译器实现的扩容方式不一样,VS2015中以1.5倍扩容,GCC以2倍扩容。
    问题:为什么要成倍的扩容而不是一次增加一个固定大小的容量呢?为什么是以两倍的方式扩容呢??

    答:成倍扩展是为了保证常数时间的复杂度,以2倍方式扩容是为了防止内存的浪费,更好的实现对内存的利用。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月1日
  • 已采纳回答 4月23日
  • 创建了问题 4月23日

悬赏问题

  • ¥15 有没有可以帮我搞一个微信建群链接,包括群名称和群资料群头像那种,不会让你白忙
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题