而大于负数则不起作用

时间:2016-11-29 09:56:36

标签: c++ for-loop while-loop

我有一段非常简单的代码,基本上需要从某个数字倒计时,并将该计数用作数组的索引。

auto bigSize = BigArray.size() - 1;

while(bigSize > -1) {
   auto thing = arr[bigSize ];
   bigSize--;
}

但是代码似乎永远不会触及循环中的任何内容。我也试过for循环:

auto bigSize = BigArray.size() - 1;

for(int i = bigSize ; i >= 0 && i < bigSize ; --i) {
   auto thing = arr[i];
}

我觉得我做错了什么,但我似乎无法找到它。

2 个答案:

答案 0 :(得分:2)

while(bigSize > -1) {
   auto thing = arr[bigSize ];
   bigSize--;
}

这永远不会停止。 bigSizeunsigned,这意味着它不能包含负值。当bigSize为0并且您尝试递减它时它变为std::numeric_limits<type>::max()。 (下溢,而不是负面)所以它会继续循环。

更改条件或明确bigSize int

答案 1 :(得分:0)

std :: 容器 .size()始终返回无符号数。无符号数将始终大于负数,即使您下溢。