vector----可以看成动态的数组
它允许放
一个vector的大小为12个字节
原理就是vector这个模板类中由三个参数构成
而这三个参数全是指针—3*4==12
1.start -----指向头部的指针
2.finish -----指向尾部的指针
3.end_of_storage-------指向最大容量的指针
事实上vector中最大容量和尾部是不一样的,
头和尾组成有数据的范围
而最大空间是指该vector目前的最大容量
每次在插入新元素时,vector会通过比较finish和end_of_storage是否相等来判断有无空间来放入新元素
若相等,即无空间,此时就是先扩容---------一般linux是2倍扩容,而window是1.5倍。扩容可以概括为重新申请一块大小为之前最大空间大小2倍(或1.5倍)的空间,然后从start到finish将数据重新添加到新的空间中,最后再释放之前的空间并添加新元素
可以想象到,每次扩容,都会有大量元素的拷贝,那么就会调用拷贝构造函数,即以最后还要销毁元素,那么就有析构函数,如果元素量比较大,那么自然耗时会大大增加