没有重新分配。但是后续的元素被往前移动,因此被删除的元素之后的迭代器会失效。例如,下面的代码在debug模式下将会崩溃,在release模式下正常运行而且可以看到数组的地址并没有改变。
#include
#include
int main(){
std::vectorv{ 1, 2, 3, 4, 5, 6, 7 };
auto p = v.end() - 2;
std::cout << &v[0] << "\t" << *p << "\t" << &*p << "\n";
v.erase(v.begin() + 2);
std::cout << &v[0] << "\t" << *p << "\t" << &*p << "\n";
return 0;
}
v.swap(vector
建议你看一下源代码,或者单步调试看看具体的执行过程。