vector.size()-2导致无限循环-C++



我正在尝试对向量运行循环,但不对最后两个元素运行循环。因此,我使用了以下实现:

vector<int> x;
for(int i=0;i<x.size()-2;i++){
cout<<"looping over element"<<endl;
}

然而,在x中不插入任何元素的情况下运行上述代码会导致无限循环。Ideone链接:

为什么我会有这种行为?如果x.size()==0,则i<-2条件不应保持,并且代码永远不应进入循环

x.size()返回一个无符号值。如果这小于2,则该值将下溢,并且结果将变得非常大。

另一方面,由于i是一个有符号类型,因此它迟早会达到int的最大值(仍将小于x.size() - 2的结果(,然后i++将导致算术溢出,这是未定义的行为

在尝试此循环之前,必须确保x.size() >= 2需要确保计数器变量是无符号类型(如size_t(:

if (x.size() >= 2)
{
for (size_t i = 0; i < x.size() - 2; ++i)
{
// ...
}
}

当x.size((小于2,减去2,得到一些大值,因为结果是无符号的,((someunsigned(-1(是一个巨大的数字因此循环运行:

i=0
i=50000
i=1000000
i=4,294,967,295 //Stop

所以,你没有无限循环,只有一个运行很长的循环

相关内容

  • 没有找到相关文章

最新更新