概述:
- vector,可变大小的动态数组,属于顺序容器,在内存中是连续存储的,因此可以支持快速随机访问。
- vector/string在尾部添加(push_back)删除元素时很快,但是在其他位置(intert)插入元素时效率很低很耗时。原因:string/vector是连续存储的当向其他位置添加元素时,需要移动插入删除元素位置之后的元素来保证连续存储。
vector的内存分配机制:
当需要vector/string需要新的存储空间时,vector/string通常会分配比新空间更大的内存空间(具体实现细节与编译器的版本有关,linux通常为当前容量的2倍,vs2017为当前容量的1.5倍,1.5倍的好处是可以重用之前分配的空间,1,2,4,6当分配至6时,前面已经分配的空间为7可以重新利用之前的空间重新分配),将原来空间的元素复制到新空间中,并释放原来的内存,容器会将多分配的剩余空间作为备用,用来存储新的元素。这样,就不需要每次增加新元素都重新分配容器的内存空间,提高性能。
注:基于上述机制的vector内存扩张操作通常要比list,deque要好的多,因此在能用vector的前提下,尽量多使用vector。