【问题标题】:Can vector iterators in c++ be corrupted when you add elements? [duplicate]添加元素时,C++ 中的向量迭代器会损坏吗? [复制]
【发布时间】:2016-05-03 00:29:39
【问题描述】:

如果向向量中添加元素,向量迭代器会损坏吗?

【问题讨论】:

  • 是的,因为可能会重新分配。
  • 我没有注意到文档中的内容可以确保您在更改向量后可以使用迭代器。我不认为有任何保证,即使数据没有重新分配。
  • "插入点之前的所有迭代器和引用都不受影响,除非新容器大小大于之前的容量(在这种情况下,所有迭代器和引用都无效)[23.3.6.5/1] "
  • 阅读文档不再是人们要做的事情了吗?
  • @Dan 你有这句话的来源吗?是保证还是实践中的行为? (编辑:我现在自己找到了参考。您可以在 Dan 之前发布的链接中找到它)

标签: c++


【解决方案1】:

是的。

向向量添加元素会导致重新分配,这将使所有迭代器和指向向量元素的指针无效。

【讨论】:

  • 这是我的猜测,所以如果你使用索引,你是完全安全的。
  • @zehelvion 是的,索引永远不会因此而改变。
  • 您能否在答案中添加这个以及想到的任何替代方案?我的主要目标是确保我能避免这个陷阱。它对新手来说非常烦人的原因是它可能会按预期工作,然后偶尔会突然做一些奇怪的事情(未定义的行为)。
【解决方案2】:

是的,这可能发生。 如果向量调整大小,旧迭代器不再有效。 并非所有集合都是如此。

看看invalidation rules

【讨论】:

    猜你喜欢
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2011-12-23
    • 2019-08-15
    • 2021-01-23
    • 1970-01-01
    相关资源
    最近更新 更多