对vector的理解
vector就是可以扩充的array,它有三个指针:start、finish、end_of_storage,分别代表 vector 存放了数据的开始、结束和整个容量的尾巴,它扩充的时候也不是原地就扩充(一般是2倍扩充),而是会找新的满足扩充后容量的空间,如果没有容量能满足那就结束,扩充失败
扩充空间的过程,基于G2.9
1、首先就是用push_back来调用增加元素,需要先判断 finish 是否等于 end_of_storage ,不是的话还有容量直接添加进去,否则需要扩容
2、扩容的函数不一定只是 vector 在用,所以在重新判断下finish 是否等于 end_of_storage ,否则扩容,在选定扩容的长度时,要判断下是不是初始长度:0,是的话设1,其他情况直接 *2
3、那接下来就是把原空间的值复制到新空间里,但是这个函数可能会被 insert 用来中间插入,所以在前段复制好后,再将后段复制一下,当然 vector 不会受到影响
4、要注意把原空间释放
vector iterator
因为 vector 空间是连续的,那按理说直接用指针就可以,不用像 list 一样用 class
所以 traits 问它的时候,是其走偏特化的那部分