关于迭代器和泛型函数的考试问题

时间:2011-12-25 19:18:53

标签: c++ iterator

我正在尝试解决以下考试问题,但我遇到了困难。

  

编写一个C ++函数find_elem,它首先需要两个迭代器   类型为T的某些元素序列和类型为obj的对象T。它   将迭代器返回到范围中第一次出现的obj   (firstlast)或迭代器,如果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;
 }  
}

这次尝试是否正确?返回类型是否适合该功能或者我的想法是错误的?

1 个答案:

答案 0 :(得分: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;
}