为什么会遇到无限循环?

时间:2017-02-04 15:17:17

标签: c++

为什么这个结果会进入无限循环?

输入for循环后,我打印的iv.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;
}

1 个答案:

答案 0 :(得分:8)

问题在于与下溢后的无符号数相比较。

向量的大小为1.您减去2,并以数学方式得到-1。但是,在无符号数学中,你会得到一个非常大的数字,所以你的循环会比你想象的要长得多。

为了避免这种情况,请用加法替换减法:

i+2 <= v.size()