C++;向量迭代器错误 我已经学习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!! } } int nZeros=0; 对于(int k=0;k

C++;向量迭代器错误 我已经学习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!! } } int nZeros=0; 对于(int k=0;k,c++,c++11,visual-c++,vector,iterator,C++,C++11,Visual C++,Vector,Iterator,您正在向只有4个有效元素的迭代器添加5个元素。这里的问题是评估的顺序。当编译器看到possibleGrid[i][j].begin()+k-nZeros时,它将其解释为(possibleGrid[i][j].begin()+k-nZeros;因此,当k和nZeros都是5时,它首先向迭代器添加5(使其无效),然后从现在无效的迭代器中减去5 要修复此错误,只需在(k-nZeros)周围添加括号即可。您正在向只有4个有效元素的迭代器添加5个元素。这里的问题是评估的顺序。当编译器看到possibleG

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


要修复此错误,只需在
(k-nZeros)

周围添加括号即可。您正在向只有4个有效元素的迭代器添加5个元素。这里的问题是评估的顺序。当编译器看到
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))


试试看。:)

我认为如果你做了以下事情,你的问题应该得到解决 possibleGrid[i][j].erase(possibleGrid[i][j].begin()+(k-nZeros))


试试看。:)

擦除
更改
大小
?!不
擦除
更改
大小
?!非常感谢:)这个修好了。非常感谢:)这个修好了。