嵌套for循环和重复的迭代器

时间:2018-09-02 22:03:37

标签: c++ c++11

请考虑以下嵌套的for循环。我很难弄清楚为什么当内部for循环退出时,外部for循环试图在显然不应该这样做时增加迭代器的原因。这会导致段故障。如果条件为cbeg != vec.cend(),为什么外层for循环会继续运行。显然,该条件已在内部for循环中检查,没有问题,并且已正确退出。

我不认为任何迭代器在这里都无效,唯一的操作是增量。

vector<int> vec{1,2,3,4};

for (auto cbeg = vec.cbegin(); cbeg != vec.cend(); cbeg++)
{
   for (; cbeg != vec.cend(); cbeg++) {
   }
}

我在这里想念什么?

1 个答案:

答案 0 :(得分:8)

达到}会增加迭代器,然后然后检查条件。

退出内部循环时,cbeg == vec.cend()。然后cbeg由外循环再次增加,导致不确定的行为,然后才能检查外循环的条件。