C++ 中的 for 循环中增量何时发生?

foo*_*bar 2 c++ for-loop

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

在调试时,我注意到,对于给定的示例输入测试用例,当i=0j=3条件if满足并且找到第一个值 时,值会递增,然后两个值都会按预期从数组中删除,并递减为from ,然后设置为,现在,控制权返回到语句,理想情况下,应该执行 for 循环的主体,但是,我在调试器中看到,当执行语句时,设置为.pairpairsn79j0forj<nforj1

我不明白这一点。增量到底是什么时候发生在我的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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

for*_*818 6

引用cppreference,这个 for 循环

for (init_statement ; condition ; iteration_expression) {
     statement
}
Run Code Online (Sandbox Code Playgroud)

相当于:

{
    init_statement
    while ( condition ) {
        statement
        iteration_expression ;
    } 
} 
Run Code Online (Sandbox Code Playgroud)

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