C ++中的迭代器无效
在C++中,我们有不同的容器,例如vector,list,set,map等。要遍历这些容器,可以使用迭代器。在C++中使用迭代器时,应格外小心。当我们在容器上使用迭代时,有时可能会使它无效。如果形状,大小发生变化,那么我们将面临此类问题。在以下示例中,我们可以确定无效问题。
范例程式码
#include <iostream> #include <vector> using namespace std; int main() { vector <int> vec{11, 55, 110, 155, 220}; for (auto it=vec.begin(); it!=vec.end(); it++) if ((*it) == 110) vec.push_back(89); //inserting a new value while iterating the vector for (auto it=vec.begin();it!=vec.end();it++) cout << (*it) << " "; }
输出结果
11 55 110 155 220 89 89
在此程序中,我们可以获得不同种类的结果。在此,向量的大小没有更早定义。提供了一些用于初始化的值。现在,在迭代的同时,我们又增加了一个值。在这种情况下,如果向量没有空间,它将在运行时创建一个新的内存块,并且所有项目都将被复制。但是迭代器将指向先前的地址。为此,它可能会导致一些无效。
让我们看看迭代器失效的一些规则。