2009-12-03 110 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变形金刚迷:)