在C++中的for循环中,增量究竟何时发生



我有这样的逻辑,理想情况下应该在int数组中找到int对,找到对后,将其从数组本身中删除并重新开始。

在调试过程中,我注意到,对于给定的样本输入测试用例,当i=0j=3满足if条件并找到第一个pair时,pairs值会增加,然后两个值都会按预期从数组中删除,n9减至7,然后j设置为0,现在,控制权返回到for语句,理想情况下,应该将for循环的主体作为j<n来执行,但是,我在调试器中看到,当执行for语句时,j被设置为1

我不明白。在我的for循环中,增量到底是什么时候发生的,因为如果我只是将其设置为0,并且条件满足,则控件应该继续寻找下一对?

/*
sample input case
9 (n number of inputs)
10 20 20 10 10 30 50 10 20 (array of ints)
*/
for (int i = 0; i < n; i++) {
for (int j = 1; j < n; j++) {
if (ar[i] == ar[j]) {
pairs++;
ar.erase(ar.begin() + i);
ar.erase(ar.begin() + j-1);
n-=2;
j = 0;
}
}
}

引用cppreference,这是循环

for (init_statement ; condition ; iteration_expression) {
statement
}

相当于:

{
init_statement
while ( condition ) {
statement
iteration_expression ;
} 
} 

您的混淆很可能是由于在迭代时擦除元素造成的。不建议在迭代期间插入/删除元素。如果您这样做了,您必须考虑到在iteratonn中,容器中的n-th元素不一定是原始容器中的n-th元素。阅读擦除-删除习惯用法,了解一种不易出错的擦除元素的方法。

最新更新