我的程序中有一个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/