2013-06-18 81 views
0

我有這個std :: find_if()類似的方法,返回找到的迭代器(匹配「條件」仿函數)。從像std :: find_if方法返回的迭代器不匹配常規迭代器

template<class T, class Function> 
typename std::set<T>::iterator setFindIf(set<T> set, Function condition) { 
    typename std::set<T>::iterator iterator = set.begin(); 
    for (; iterator != set.end(); iterator++) { 
     cout<<"U"; 
     if (condition(*iterator)) { 
      break; 
     } 
    } 
    return iterator; 
} 

而此行調用它:

std::set<Order>::iterator it = setFindIf(orders, orderCustomerHasOpenOrder(id, ordNum)); 

我在一個空集檢測,所以這條線(附帶上述行之後)應打印「1」:

cout<<(it==orders.end()); 

爲什麼不能正常工作?當我在setFindIf()方法的末尾添加此行時,它會按預期打印「1」。

回答

8

您正在按照價值計算。因此,它是您傳入的容器的副本。比較這些迭代器是未定義的行爲,因爲它們屬於不同的容器。改爲通過引用傳遞集合。