为什么会遇到无限循环?

Pra*_*nde -6 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;
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 8

问题在于与下溢后的无符号数进行比较.

向量的大小为1.您减去2,并以数学方式得到-1.但是,在无符号数学中,您得到的数字非常大,因此循环持续的时间比预期的要长得多.

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

i+2 <= v.size()
Run Code Online (Sandbox Code Playgroud)