vector在push_back以成倍增长可以在均摊后达到O(1)的事件复杂度,相对于增长指定大小的O(n)时间复杂度更好。 为了防止申请内存的浪费,现在使用较多的有2倍与1.5倍的增长方式,而1.5倍的增长方式可以更好的实现对内存的重复利用。 Windows和Linux的扩容底层原理 STL标准没有严格说明我们应该按照哪一种方式进行扩容,因...
了解这些底层实现原理,可以帮助我们更好地选择和使用它们。 ArrayList的扩容机制 ArrayList是基于动态数组实现的,它允许在运行时动态地调整数组的大小。当ArrayList中的元素数量达到数组当前的容量时,ArrayList会创建一个新的数组,其容量是原容量的1.5倍(如果原容量小于10),或者增加50%(如果原容量大于等于10),然后将原数...
我们了解其原理的最好方式就是看源码,下面我们就去看一下arrayList的源码: 一、ArrayList arrayList借助数组实现的,有序,并且拥有固定的索引值。因此查询效率非常高,但是删除、插入等动作,需要去调用System.arraycopy函数操作内存中的数据搬移,相较效率较低。 1-1、首先看一下我们看一下构造器. /** * 默认初始...
2、请你说说 unique_ptr 的实现原理及使用场景 3、请你说说单例设计模式 4、请你回答一下智能指针有没有内存泄露的情况 5、shared_ptr 怎么知道跟它共享对象的指针释放了 6、请你说说红黑树的特性,为什么要有红黑树 7、请你说说 set 的实现原理 8、请你说说 vector 的扩容机制,扩容以后,它的内存地址会变化...