2011-12-25 5 views
0

아래의 시험 문제를 풀려고하지만 문제가 있습니다. 반복자 및 일반 함수에 대한 시험 문제

두 반복기 성과 T 형의 요소 타입의 객체 T obj 일부 시퀀스 취하는 C++ 함수 find_elem 적는다. 은 ( first, last) 범위의 첫 번째 항목 인 obj으로 이터레이터를 반환하고, 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; 
} 
} 

이 시도가 정확입니까? 반환 유형이 함수에 적합합니까? 아니면 잘못된 생각을 갖고 있습니까?

답변

2

예, 코드가 정확합니다. 아마도 Obj &objObj const &obj으로 변경했을 것입니다.

그리고 당신은 p이라고 선언해야합니다.

기타 니픽 : 일반 반복기는 보통 ++p이 좋습니다.

내 변형 (기본적으로 같은) 다음 ANS에 대한

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

감사합니다, 조건 나누기 경우, 자동으로 그 시점에서 반복자를 반환? 반환 할 때 iterator 특정 obj 가리키는 것이라고 가정합니다? – Sun

+0

@Sun :'break'에서 루프가 종료되고'return iter1;'이 실행됩니다. 'iter1'의 값은 우리가 그 순간에 필요로하는 것과 정확히 일치합니다. – Vlad