C++ 向量迭代器错误

C++ Vector iterator error

我已经学习了一个星期的 C++,这里是我写的一些代码。我收到一条错误消息,指出向量迭代器超出范围。当 knZeros 的值都为 5,possibleGrid[i][j].size()=4 时会发生错误。

int nZeros = 0;
        for (int k = 0; k < Size; k++)
        {

            if (possibleGrid[i][j][k - nZeros] == 0)
            {
                nZeros++;
                possibleGrid[i][j].erase(possibleGrid[i][j].begin() + k - nZeros); //something here is wrong!!
            }

        }

您将 5 添加到只有 4 个有效元素的迭代器。这里的问题是评估的顺序。当编译器看到 possibleGrid[i][j].begin() + k - nZeros 时,它会将其解释为 (possibleGrid[i][j].begin() + k) - nZeros;因此,当 knZeros 都是 5 时,它首先将 5 加到迭代器(使其无效),然后从现在无效的迭代器中减去 5。

要修复错误,只需在 (k - nZeros) 周围添加括号。

我想如果你按照下面的方式去做,你的问题就应该解决了 possibleGrid[i][j].erase(possibleGrid[i][j].begin() + (k - nZeros));

试试吧。 :)