【问题标题】:What will happen if I keep incrementing an iterator? [duplicate]如果我不断增加迭代器会发生什么? [复制]
【发布时间】:2014-04-24 01:42:46
【问题描述】:

我有一个简单的问题:如果我在迭代器到达 C++ STL 容器的 end()(最后一个)时继续递增迭代器会发生什么?例如

set<int> intSet;
intSet.insert(0);
intSet.insert(1);
intSet.insert(2);
set<int>::iterator setIter = intSet.begin();
for (int i = 0; i < 10; i++)
  setIter++;

那么,setIter 会一直是 intSet.end() 吗?或者这是一个未定义的行为(可以给我不一致的垃圾)?

【问题讨论】:

  • @Tahlil 可能,他害怕破坏宇宙,因为我们不知道会发生什么。
  • @Tahlil 仅仅因为它可能有效并不意味着它一定有效。
  • @Joe 我的问题的目的是让他告诉我们他在提出问题之前做了哪些研究。没有别的了:)

标签: c++ iterator set increment


【解决方案1】:

它会在 VS2013 中抛出运行时错误。但是,它不会在 G++(ideone)中。但是,如果您曾经使用它,它是未定义的行为。绝对不等于intSet.end()

【讨论】:

    【解决方案2】:

    至少在 GNU 编译器中,仅仅增加它的行为什么都不会

    如果您尝试取消引用它,则会调用未定义的行为。

    更多讨论请见this question

    【讨论】:

    • 谢谢,是的,我知道我不应该取消引用它。我只需要知道这是否可以给我一致的行为。如果我使用不同的编译器,似乎不会。
    猜你喜欢
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2017-05-25
    • 1970-01-01
    • 2014-03-27
    相关资源
    最近更新 更多