[英]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::find
和std::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.