当这个容器也是容器的元素时,为什么容器的迭代器无效?

chenyuandong
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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么标准容器迭代器不会重载`-> *`?

在隐式共享容器上使用迭代器时,为什么必须先进行复制?

为什么使用容器时C ++不会使begin()无效

在容器上迭代时更改容器元素的惯用方式

迭代排序的stl容器时插入元素

内置容器的迭代器

关于容器的迭代器

序列容器的迭代器类型是什么?

为什么在使用jQuery对容器div中的子元素进行计数时,浏览器为什么冻结?

为什么不支持容器适配器中元素的初始化和迭代

迭代器与STL容器的关系

稀疏的容器和迭代器

非模板容器迭代器

为什么我可以将两个不同容器的迭代器进行排序?

为什么STL容器可以使用const迭代器插入

迭代时从STL容器中查找和擦除元素

为什么在使用Jenkins dockerfile代理时,它使用无效用户运行容器?

通过直接在C ++中直接访问容器的迭代器来删除容器的元素

当浮动元素的容器没有高度时,为什么浮动元素没有与文档流分离?

对于代理容器上的迭代器,什么是“最差的实现”?

为什么当它的容器具有全宽时滚动隐藏某些元素?

当子元素字体大小增加时,为什么容器会升高?

为什么使用 z-index -1 时子元素会落后于容器

悬停时元素脱离容器

为什么容器不扩展以适应其内联元素

为什么在访问元素之前在容器上使用std :: forward?

为什么我的 div 容器内的元素消失了?

为什么 STL 的迭代器会暴露其容器的内部结构?为什么迭代器的成员变量大多是公开的?

当最小高度设置为容器高度时,为什么不继承容器高度?