为什么这个结果会进入无限循环?
输入for
循环后,我打印的i
和v.size()-2
值分别为0
和-1
。因此,循环条件必须为false
。那么,这个程序如何首先进入for
循环?
#include <iostream>
#include <vector>
int main() {
std::vector<int> v {1};
std::cout << "Size:: " << v.size();
for (int i=0 ; i <= (v.size()-2) ; i++) {
std::cout << "Hello";
}
return 0;
}
答案 0 :(得分:8)
问题在于与下溢后的无符号数相比较。
向量的大小为1.您减去2,并以数学方式得到-1。但是,在无符号数学中,你会得到一个非常大的数字,所以你的循环会比你想象的要长得多。
为了避免这种情况,请用加法替换减法:
i+2 <= v.size()