请考虑以下嵌套的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++) {
}
}
我在这里想念什么?
答案 0 :(得分:8)
达到}
会增加迭代器,然后然后检查条件。
退出内部循环时,cbeg == vec.cend()
。然后cbeg
由外循环再次增加,导致不确定的行为,然后才能检查外循环的条件。