[英]Why for loop is not stopping?
我的程序中有一個沒有停止的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
循環的output如下:
0 0
-1 0
-2 0
-3 0
-4 0
.
.
.
根據 output, i
的值正在減小, v.size()-k
的值為 0。因此, i >= v.size()-k
為假,這應該在第一輪之后停止for
循環執行, 但for
循環並沒有停止執行。
有人可以幫我理解這個問題嗎?
您正在檢查i
是否大於或等於零。 但是由於size()
返回一個無符號數,因此您將i
與一個無符號數零進行比較。 為了進行比較,將i
轉換為與size()
返回的相同的無符號類型。 好吧,每個無符號整數值都大於或等於零。 所以無論i
有什么價值,比較都是真的。
size()
function 必須返回一個足夠大的類型以容納向量中可能存在的最大條目數。 這可能大於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--){
| ~^~~~~~~~~~~~~~
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.