簡體   English   中英

為什么for循環沒有停止?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM