使用 size() 时 C++ for 循环结束条件不起作用


vector<int> score= {1,1,1,1,1};
int z = score.size();
for(int j=score.size() - 1; j >= z - 5; --j)
cout << j << endl;

现在的代码很好,但是当我用

替换该行时会导致错误:for(int j=score.size() - 1; j >= score.size() - 5; --j)

从打印出来的中,我已经推断出这是因为j趋向于-1或更大。我的问题是,为什么当我用z替换size()函数时会发生这种情况?for循环内部不修改size[i].

在这个表达式中:

j >= z - 5

由于jz都是int,所以比较工作很好,因为当j变成-1时,左边可以是-1

在这个表达式中:

j >= score.size() - 5

右边是unsigned,所以左边也隐式地转换为unsigned。当j变成-1时,转换得到一个非常大的整数,并且比较不能按预期工作。

size()unsigned,因此size()-1size()-5也将是unsigned(尽管您将第一个值分配给signedint)。j >= score.size() - 5正在比较有符号整数j无符号整数size()-5

相关内容

  • 没有找到相关文章

最新更新