我有一段非常简单的代码,基本上需要从某个数字倒计时,并将该计数用作数组的索引。
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];
}
我觉得我做错了什么,但我似乎无法找到它。
答案 0 :(得分:2)
while(bigSize > -1) {
auto thing = arr[bigSize ];
bigSize--;
}
这永远不会停止。 bigSize
为unsigned
,这意味着它不能包含负值。当bigSize
为0并且您尝试递减它时它变为std::numeric_limits<type>::max()
。 (下溢,而不是负面)所以它会继续循环。
更改条件或明确bigSize
int
。
答案 1 :(得分:0)
std :: 容器 .size()始终返回无符号数。无符号数将始终大于负数,即使您下溢。