gpt4 book ai didi

c++ - 为什么for循环没有停止?

转载 作者:行者123 更新时间:2023-12-01 15:10:27 25 4
gpt4 key购买 nike

我的程序中有一个for循环没有停止:

vector<int> v;
int k = 1;
v.push_back(1);

for(int i=v.size()-1; i>=(v.size()-k); i--){
cout << i << " " << v.size() - k << endl;
}
当我执行上述程序时,它会继续在 for循环内运行。 for循环的输出如下:
0 0
-1 0
-2 0
-3 0
-4 0
.
.
.
根据输出, i的值在减小, v.size()-k的值为0。因此, i >= v.size()-k为false,这应该使 for循环在第一轮之后停止执行,但是 for循环不会停止执行。
有人可以帮助我了解这个问题吗?

最佳答案

您正在检查i是否大于或等于零。但是由于size()返回无符号,因此您正在将i与无符号零进行比较。为了进行比较,将i转换为size()返回的相同无符号类型。好吧,每个无符号整数值都大于或等于零。因此,无论i具有什么值,该比较都是正确的。size()函数必须返回足够大的类型,以容纳 vector 中可能存在的最大条目数。该值可以大于int可以容纳的最大值。在典型的现代平台上,int可能是32位带符号类型,而size()返回的是64位无符号类型。
这是我的编译器发出的警告:

a.cpp: In function ‘int main()’:
a.cpp:10:28: warning: comparison of integer expressions of different signedness:
‘int’ and ‘std::vector<int>::size_type’
{aka ‘long unsigned int’} [-Wsign-compare]
10 | for(int i=v.size()-1; i>=(v.size()-k); i--){
| ~^~~~~~~~~~~~~~

关于c++ - 为什么for循环没有停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62957833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com