【问题标题】:Does insertion to STL map invalidate other existing iterator?插入到 STL 映射是否会使其他现有迭代器失效?
【发布时间】:2011-05-19 14:20:30
【问题描述】:

我在 STL 中使用了 std::map。我可以在将其他元素插入地图后使用迭代器吗?还有效吗?

【问题讨论】:

    标签: c++ stl


    【解决方案1】:

    如果对容器操作的语义有疑问,请咨询the documentation

    Map 有一个重要的属性,即在map 中插入一个新元素不会使指向现有元素的迭代器失效。

    map 中删除元素也不会使任何迭代器失效,当然,实际上指向被删除元素的迭代器除外。

    这取自 SGI STL 文档。虽然本文档在技术上并未指定 C++ 标准库容器的行为,但除了不属于 C++ 标准库的 STL 部分之外,这些差异通常是微不足道的。

    SGI STL 文档是必不可少的参考资料,尤其是在您没有 C++ 标准副本的情况下。

    【讨论】:

    • +1,SGI 文档非常好。唯一更好的信息来源——即使更难阅读——是标准。您可以花 30 美元左右购买自己的电子版标准,也可以从 google 的 codeassist here 下载
    【解决方案2】:

    从标准 23.1.2/8

    插入成员不应影响 迭代器的有效性和 对容器的引用,以及 擦除成员应仅无效 迭代器和对已擦除对象的引用 元素。

    【讨论】:

      【解决方案3】:

      插入 std::map 不会使现有迭代器无效。

      【讨论】:

        猜你喜欢
        • 2011-04-02
        • 2015-12-23
        • 2011-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-01
        • 1970-01-01
        相关资源
        最近更新 更多