簡體   English   中英

for循環后的分號是什么意思? 為什么在第一循環語句中有一個j ++?

[英]What does a semicolon after for-loop means? Why is there a j++ in first loop statement?

我需要基於優先級隊列實現自己的Dijkstra算法版本,並且在搜索一些有關該站點的站點時,我看到了一種確實有效的算法,但帶有奇怪的for循環語句:

int i,j,n;
cin >> n;   //number of vertexes
bool *QS = new bool [n];

//whole QS is set to false here

for(i = 0; i < n; i++) {
    for(j = 0; QS[j]; j++);
    for(u = j++; j < n; j++)
        if(!QS[j] && (d[j] < d[u]))   //d[i] is table of distances
            u = j;
    QS[u] = true;

    //some code
}

我知道; after循環意味着它是一個空語句,但是如果我在第二個for-loop注釋該程序停止工作,那么它實際上意味着一些東西。 我相信,這個u = j++目的像是從u = j+1起始形式開始,但是我不太確定。

for(j = 0; QS[j]; j++); 用作j=0; while(QS[j])j++; j=0; while(QS[j])j++;

即找到QS[j]為假的第一個j

for(j = 0; QS[j]; j++);

j設置為0,然后遞增j直到QS中的第一個元素為false。 然后,將該值用作第三個循環的初始值。

這是一種切肉刀的書寫方式,但是您可以使用std::findstd::distance這樣的方式來表達更多內容

for(i = 0; i < n; i++) {
    int j = std::distance(std::begin(QS), std::find(std::begin(QS), std::end(QS), false));
    for(u = j++; j < n; j++)
        if(!QS[j] && (d[j] < d[u]))   //d[i] is table of distances
            u = j;
    QS[u] = true;

    //some code
}

它明確指出j是從數組開頭到第一個false元素的距離。

第二個for循環遍歷所有數組QS,它是布爾數組。 當一個為假時,它將中斷,保存j的當前值,並從該值+1開始下一個循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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