int main() {
std::vector<std::vector<int>> v;
v.push_back({1,2,3,4});
auto it = v.at(0).begin();
int size = v.at(0).size();
std::cout<<size<<std::endl;
for (int i = 0; i < size; ++it)
{
v.push_back({5,6,7,8});
//std::cout<<*it<<std::endl;
}
return 0;
}
当我将一些元素推入外部容器时,迭代器被破坏。如果我真的想在外部容器内部迭代容器元素,同时继续推回一些新元素,我该怎么办?非常感谢!
当外部向量调整大小时,它必须执行以下两项操作之一:
如果类型具有非抛出移动语义(移动构造函数被标记为noexcept等),它只能移动元素。
在这种情况下,元素是一个包含整数的向量,它递归地依赖于它的元素。由于 integer 不会抛出,因此内部向量也应该是 noexcept-movable 。该标准要求迭代器在移动此类向量时保持有效。
你说迭代器在你的例子中坏了,但真正的问题是你的代码中的一个错误:
for (int i = 0; i < size; ++it) // << HERE
{
v.push_back({5,6,7,8});
//std::cout<<*it<<std::endl;
}
您不增加循环变量,而是在无限循环中增加迭代器
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句