0
for (int i=0;i<matSize;i++) 
{

    if(condition[i]==1)
    {
    displacement.erase (displacement.begin()+i);
    }

 }

这个循环有什么问题?我正在尝试从满足条件的位移矢量中删除元素。我无法让擦除循环工作。有人可以帮助我吗?谢谢。

4

1 回答 1

0

我会冒昧地假设这是 C++,而您正在使用 std::vector。

假设向量中有 5 个元素。擦掉一个后,还剩多少?接下来你会检查哪一个,你会数多高?

更明确地说,假设它是

[0, 10, 20, 30, 40]

并且你想擦除 10 和 20。所以当i是 1 时,你测试 10 并擦除它;现在向量是

[0, 20, 30, 40]

然后您i增加到 2,并检查 30,完全错过了 20。当您迭代结束时(即i4 时),您将遇到更大的麻烦。

解决方案很简单,您可以通过在一个小而简单的向量上尝试您的代码并查看您正在测试和擦除哪些元素来发现所有这些。

于 2013-01-07T16:46:12.867 回答