私は以下の試験問題を解決しようとしていますが、問題があります。イテレータとジェネリック関数に関する試験問題
は、最初と最後 タイプ
T
の要素のいくつかの配列と種類T
のオブジェクトobj
の2回の反復子を取るC++関数find_elem
を書きます。 は、 (first
,last
)の範囲の最初のオカレンス、またはobj
のイテレータを返します。 (35%)注:
first
&last
必ずしも コンテナのbegin()
とend()
メソッドによって返されるものと同じではありません!コンターはシーケンス(例:ベクトル、リスト、 など)であり、最後に指し示すものの前にある の要素を指すイテレータであることは、 です。最後に を参照してはなりません。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;
}
}
この試みが正しいですね。戻り値の型は関数に適していますか、間違った考えを持っていますか?
おかげで、条件が破損した場合、それは自動的にその時点で反復子を返すでしょうか?私はイテレータが特定のobjを指していると仮定します。 – Sun
@Sun: 'break'でループが終了し、' return iter1; '行が実行されます。 'iter1'の値は、まさにその時に必要なものになります。 – Vlad