2011-12-25 46 views
0

我試圖解決下面的考試問題,但我遇到了困難。關於迭代器和泛型函數的考試

寫C++函數find_elem採用兩個迭代器的第一和最後 T類型的元素和T類型的對象obj的一些序列。它 將迭代器返回到範圍爲 (first,last)的第一個出現obj,或者如果obj不在序列中,則迭代器返回最後一個。 (35%)

注:first & last不一定相同,是什麼 容器的begin()end()方法返回!我們唯一假設的是容器是某種序列(例如,向量,列表, 等),並且首先是一個迭代器,該迭代器指向 在last指向的元素之前出現的元素。你不能取消最後的 ,因爲它可能是end()的結果!

這是我嘗試

template<typename Iter, typename Obj> 
Iter find_element(Iter iter1, Iter iter2, Obj &obj){ 
for(p = iter1; p != iter2; p++){ 
    if((*p) == obj){ 
    return p; 
    } 
return iter2; 
} 
} 

這是嘗試正確的嗎?返回類型是否適合該功能或者我有錯誤的想法?

回答

2

是的,你的代碼是正確的。我可能只會將Obj &obj更改爲Obj const &obj

而你應該宣佈p

更多挑剔:使用泛型迭代器通常首選++p形式。

我變型(基本一致):

template<typename Iter, typename Obj> 
Iter find_element(Iter iter1, Iter iter2, Obj const &obj) 
{ 
    for(; iter1 != iter2; ++iter1) 
    { 
     if(*iter1 == obj) 
      break; 
    } 
    return iter1; 
} 
+0

感謝答,當if條件休息,它會自動返回該點迭代器?我認爲迭代器會在返回時指向特定的obj? – Sun 2011-12-25 19:41:14

+0

@Sun:在'break'處,循環將退出,並且'return iter1;'行將被執行。 iter1的價值正是我們當時所需要的。 – Vlad 2011-12-25 20:42:17