当我们使用矢量擦除或插入时会发生什么

use*_*850 0 c++ vector

它是否从向量的右侧移动所有元素(如果删除则向左移动1个位置,如果插入则向右移动到1个位置)或者它是否像链接列表一样(它创建一个新地址并创建一个新地址.当我使用字符串初始化一个向量如何处理内存.如果它按顺序存储它,当它在达到其最大内存分配时继续执行push_back时会发生什么.

vso*_*tco 5

A std::vector(通过C++标准)保证将元素存储在连续的存储区域中.这意味着不,它不像链表,而更像是动态分配的数组.当向量达到最大容量后,当push_back元素发生重新分配时,元素将被复制到新缓冲区中.当你使用插入或擦除元素时会发生相同的情况,因为这些操作通常是O(N)而不是O(1),因为链接列表就是这种情况.

所以它看起来std::vector比一个更糟糕std::list.但事实并非如此,因为在许多应用程序中,读取操作是主要的操作,由于存储元素是连续存储的,因此a std::vector的速度比std::list缓存局部性和O(1)随机访问快.push_back也是O(1),除非向量执行重新分配(技术上push_pack具有摊销的O(1)复杂度).