【问题标题】:Exam ques regarding iterators and generic functions关于迭代器和泛型函数的考试题
【发布时间】:2011-12-25 19:18:52
【问题描述】:

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

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

这种尝试正确吗?返回类型是否适合该函数或我的想法有误?

【问题讨论】:

    标签: c++ iterator


    【解决方案1】:

    是的,您的代码是正确的。我可能只会将Obj &amp;obj 更改为Obj const &amp;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;
    }
    

    【讨论】:

    • 感谢回答,当 if 条件中断时,它会自动返回那个时候的迭代器吗?我假设迭代器在返回时会指向一个特定的 obj?
    • @Sun:在break处,将退出循环,并执行return iter1;这一行。 iter1 的值正是我们当时所需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多