文章目录
一、概述
- 一、概述
- 二、 高效使用vector,避免扩容
- 1.扩容机制回顾
- 2.如何避免扩容导致效率低
- 三、为什么选择以倍数方式扩容
- 1. 以等长个数进行扩容
- 2. 以倍数方式进行扩容
- 3. 为什么选择1.5倍或者2倍方式扩容,而不是3倍、4倍
- 四、Windows和Linux的扩容底层原理
- 1.Windows扩容底层
- 2.Linux的扩容底层
- 五、总结
在面试时vector的扩容问题会经常被问到,比如:
- vector是如何进行扩容的?
- 扩容会导致效率低下,那如何避免动态扩容呢?
- 为什么选择以1.5倍或者2倍方式进行扩容?而不是3倍4倍扩容?
- vs为什么选择1.5倍,linux为什么选择2倍?
一系列问题下来,是否有种被吊打的感觉呢?本节我们再来深究vector扩容背后所包含的细节问题,让你的面试不再尴尬。
二、 高效使用vector,避免扩容 1.扩容机制回顾当向vector中插入元素时,如果元素有效个数size与空间容量capacity相等时,vector内部会触发扩容机制:
开辟新空间
- 拷贝元素。
- 释放旧空间。
注意:每次扩容新空间不能太大,也不能太小,太大容易造成空间浪费,太小则会导致频繁扩容而影响程序效率。
2.如何避免扩容导致效率低如果要避免扩容而导致程序效率过低问题,其实非常简单:如果在插入之前,可以预估vector存储元素的个数,提前将底层容量开辟好即可。如果插入之前进行reserve,只要空间给足,则插入时不会扩容,如果没有reserve,则会边插入边扩容,效率极其低下。
#include
#include
int main ()
{
size_t sz;
std::vector foo;
// foo.reserve(100); // 先将vector底层空间扩增到100个,然后插入
sz = foo.capacity();
std::cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?