C++ 向量迭代器错误
C++ Vector iterator error
我已经学习了一个星期的 C++,这里是我写的一些代码。我收到一条错误消息,指出向量迭代器超出范围。当 k
和 nZeros
的值都为 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
;因此,当 k
和 nZeros
都是 5 时,它首先将 5 加到迭代器(使其无效),然后从现在无效的迭代器中减去 5。
要修复错误,只需在 (k - nZeros)
周围添加括号。
我想如果你按照下面的方式去做,你的问题就应该解决了
possibleGrid[i][j].erase(possibleGrid[i][j].begin() + (k - nZeros));
试试吧。 :)
我已经学习了一个星期的 C++,这里是我写的一些代码。我收到一条错误消息,指出向量迭代器超出范围。当 k
和 nZeros
的值都为 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
;因此,当 k
和 nZeros
都是 5 时,它首先将 5 加到迭代器(使其无效),然后从现在无效的迭代器中减去 5。
要修复错误,只需在 (k - nZeros)
周围添加括号。
我想如果你按照下面的方式去做,你的问题就应该解决了 possibleGrid[i][j].erase(possibleGrid[i][j].begin() + (k - nZeros));
试试吧。 :)