vector = 数组 + 自动扩容(重点)
vector
1、数据结构
vector的数据结构就是数组,拥有一段连续的内存空间,特点是随机存取
查找快,时间复杂度O(1)
插入和删除慢(会造成内存块的拷贝),时间复杂度O(n)
与数组最大的区别是:不需要考虑容量问题,库里面已经实现了容量的动态增长
2、三个指针
这里有三个很重要的迭代器(指针)
protected:
iterator start;
iterator finish;
iterator end_of_storage;
这三个指针控制容器的大小,所以vector的大小在64位下是24(64位下指针的大小为8,32位下为4)
3、扩容机制
这里有几个和扩容的相关的函数
:
push_back
:
4、内置函数
begin()
end()
size()
capacity()
empty()
operator[]:这个看一下
front()
back()
reserve():这个看一下
相关问题
不管怎么问,容器的核心还是增删改查CURD
问题一、vector的size()的实现为什么不直接用finish-start???
这里的size()的实现是调用两个函数相减实现的
两点原因:
1、直接减快不了多少
2、存在源码里面不是finish,start这种情况
问题二、vector 扩容为什么要以1.5倍或者2倍扩容?
问题三、vector如何释放内存?删除其中的元素,迭代器如何变化?删除元素时会不会释放内存空间?
问题四、vector 越界访问下标?
问题五、vector 的增加和删除是怎么实现的?
问题六、vector 与list的区别?
vector就是数组+动态扩容,list即使双向链表,所以vector和list的区别其实就是数组和链表的区别(考研常用的)
补充知识
条件编译:
#ifdef 标识符
程序段1
#else
程序段2
#endif
作用:当标识符被定义过,则对程序段1进行编译,否则对程序段2进行编译