Pau*_*ina 1 c++ loops vector unsigned-integer integer-arithmetic
问题是当我执行“ for(int i = 0; i <vector.size()-1; i ++)”时,它给我一个“向量下标超出范围”的错误。但是,如果我将vector.size()-1放入变量中,它将起作用。这是小故障还是我只是想念一些东西?
这有效:
int sizePos = positionsX.size() - 1;
for (int i = 0; i < sizePos; i++) {
if (snake.getX() == positionsX[i] && snake.getY() == positionsY[i]) {
gameOver = true;
std::cout << as << std::endl;
as++;
}
if (apple.getX() == positionsX[i] && apple.getY() == positionsY[i]) {
apple.eat();
}
}
Run Code Online (Sandbox Code Playgroud)
并且这不会:
for (int i = 0; i < positionsX.size() - 1; i++) {
if (snake.getX() == positionsX[i] && snake.getY() == positionsY[i]) {
gameOver = true;
std::cout << as << std::endl;
as++;
}
if (apple.getX() == positionsX[i] && apple.getY() == positionsY[i]) {
apple.eat();
}
}
Run Code Online (Sandbox Code Playgroud)
positionsX.size()是一种unsigned。如果它为零,则由于折回以及表达式以无符号算术求值的事实,因此将其减去1将得到无符号类型的最大值!
使用
for (std::size_t i = 0; i + 1 < positionsX.size(); i++) {
Run Code Online (Sandbox Code Playgroud)
取而代之的是,没有什么可以总是忽略向量中的最后一个元素。如果您不想要,请删除+ 1。
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |