我编写了一段代码来从 vector 中删除一个元素,但在 for 循环中使用迭代器删除后,我的程序崩溃了。即使通过迭代器在 vector 中插入一个元素也会产生相同的结果。这是代码片段:
vector<int>v1;
v1.reserve(8);
v1.push_back(10);
v1.push_back(8);
v1.push_back(12);
v1.push_back(3);
v1.push_back(7);
v1.push_back(5);
v1.push_back(17);
v1.push_back(1);
int x=6;
std::vector<int>::iterator get_it;
get_it = v1.begin();
for(;get_it!= v1.end();get_it++)
{
if(*get_it < x)
{
v1.insert(get_it, 6);
}
}
我只是想了解在 Vector 容器中删除元素或插入元素后使迭代器无效的原因。
有什么解释吗?
最佳答案
vector 动态分配内存。如果 vector 中没有足够的空间,它必须分配新内存,并从旧内存中复制数据。迭代器 a 基本上指向 vector 包装的内存,因此如果 vector 重新分配内存,迭代器(“指针”)不再指向分配的内存,而是指向旧的空闲内存。
但这只是一个原因。另一个是 vector 模拟数组,并且像数组一样, vector 中的元素是连续存储的。如果您在 vector 中间插入或删除一个元素,则必须调整插入/删除元素之后的所有数据并将其移动到新位置以仍然保持元素连续。同样,“指向”移动元素的迭代器将不再指向正确的位置。
关于c++ - 为什么 Vector 中的 Erase 和 Insert 函数会使迭代器失效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39435683/