调整向量大小会使迭代器失效吗?

2024-06-19

我发现这个C++代码:

vector<int> a;
a.push_back(1);
a.push_back(2);
vector<int>::iterator it = a.begin();
a.push_back(4);
cout << *it;

打印一些大的随机数;但如果你添加a.push_back(3)在第 3 行和第 4 行之间,它将打印 1。你能解释一下吗?


措辞更仔细的编辑

是的,调整向量的大小可能会使指向该向量的所有迭代器无效。

向量是通过内部分配一个存储数据的数组来实现的。当向量增长时,该数组可能会耗尽空间,当这种情况发生时,向量会分配一个新的、更大的数组,将数据复制到该数组,然后删除旧数组。

因此,指向旧内存的旧迭代器不再有效。 如果调整向量大小向下(例如通过pop_back()),但是,使用相同的数组。数组永远不会自动缩小。

避免这种重新分配(和指针失效)的一种方法是调用vector::reserve()首先,留出足够的空间,这样就不需要进行复制了。就您而言,如果您致电a.reserve(3)在第一个之前push_back()操作,那么内部数组将足够大,push_back无需重新分配数组即可执行,因此您的迭代器将保持有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调整向量大小会使迭代器失效吗? 的相关文章

随机推荐