2009-12-03 129 views
3

for循環在做什麼?我無法理解它。循環做什麼?

list<pair<int, double> > nabors; 
list<pair<int, double> >::iterator i; 

for (i = nabors.begin(); i != nabors.end() && dist >= i->second; i++); 
+1

哪個環路的一部分是混淆嗎? – jalf 2009-12-03 14:57:38

+1

我代表一個朋友發佈了這個問題,我不是C++的人,所以我只是複製/粘貼在這裏,我向他展示了答案...他對於stackoverflow的快速回複印象深刻 謝謝你們傢伙 – 2009-12-03 15:01:00

+3

什麼都沒有比無聊的書呆子的集體蜂羣思維更強大或更危險。 – Sneakyness 2009-12-03 15:14:50

回答

25

它的發現在nabors滿足條件

dist < i->second 

如果沒有元素滿足該條件的第一要素,迭代器inabors.end()

+0

@Dominic:感謝您的糾正;我只是想到了,回來修復它,發現它已經被糾正了。 :-) – 2009-12-03 14:58:36

+0

@詹姆斯 - 沒問題! – 2009-12-03 15:07:14

3

也許代碼與std::find_if和明確的斷言更清晰?

class further_away_than 
{ 
    double dist; 
public: 
    further_away_than(double dist) : dist(dist) {} 

    bool operator()(const pair<int, double>& p) 
    { 
     return p.second > dist; 
    } 
}; 

#include <algorithm> 

// ... 

    i = find_if(nabors.begin(), nabors.end(), further_away_than(dist)); 

不知道,我只是一個STL變形金剛迷:)