C++:while 循环条件中的运行时错误

C++: Runtime error in while loop condition

nums 是一个向量,我有一个代码行

while(i < nums.size()-2 && nums[i] == nums[i+1]) i++;

它会给我一个运行时错误,如果我 运行 nums.size() 为 1 时的代码。 但是,如果我将此行更改为:

while(i-2 < nums.size() && nums[i] == nums[i+1]) i++;

构建成功。

我不知道,执行这两行代码有什么不同,为什么构建的行为不同?

有人知道吗?提前谢谢你。

std::vector<>.size() returns 一个 unsigned longnums.size() - 2 结合使用时会产生下溢,结果是一些非常大的数字,不符合您的代码逻辑.由于表达式 i < nums.size() - 2 由于下溢而始终计算为 true,因此您将继续遍历向量,直到达到大于其大小的索引,这将导致运行时错误,更具体地说 vector index out of range.