我有这样的逻辑,理想情况下应该在 int 数组中找到整数对,找到该对后,将其从数组本身中删除并重新开始。
在调试时,我注意到,对于给定的示例输入测试用例,当i=0
和j=3
条件if
满足并且找到第一个值 时,值会递增,然后两个值都会按预期从数组中删除,并递减为from ,然后设置为,现在,控制权返回到语句,理想情况下,应该执行 for 循环的主体,但是,我在调试器中看到,当执行语句时,设置为.pair
pairs
n
7
9
j
0
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
引用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
原始容器中的元素。阅读擦除-删除习惯用法,了解一种更不容易出错的擦除元素的方法。