Just a note
vector是一个能够存放任意类型的动态数组,时刻保证vector内的元素是在容器前部,元素间没有间隔。
reserve:1、变小时,没有操作2、变大时,将原vector的元素拷贝至新空间,销毁原vector的元素。
resize:1、size变大超出capacity时,分配新空间,创建临时对象,并拷贝一份;调用拷贝构造函数复制原对象到新空间,剩余新空间用临时对象的拷贝填充。2、size变大没有超出capacity时,创建临时对象,并拷贝一份,新空间用临时对象的拷贝填充。3、size变小时,创建临时对象,销毁额外size里的对象,销毁临时对象。
添加元素:1、从尾部添加元素时,都是构造临时对象,调用拷贝构造函数向vector中添加。2、插入元素时,若容量足够,创建临时对象,拷贝一份;将尾部元素向后拷贝;从后往前调用赋值操作符将元素向后挪,最后将第一个临时对象的拷贝赋值给插入位置的元素。3、容量不够时,分配新空间,增加原容量的一半,创建临时对象,并拷贝一份;调用拷贝构造函数复制原对象到新空间,拷贝临时对象的拷贝至新空间。
删除元素:1、从尾部删除元素时,直接销毁最后一个元素。2、从中间删除元素时,调用元素的复制操作符将后面的元素向前赋值,销毁最后一个元素。
Powered by: C++博客 Copyright © 大胖