我正在尝试解决以下考试问题,但我遇到了困难。
编写一个C ++函数
find_elem
,它首先需要两个迭代器 类型为T
的某些元素序列和类型为obj
的对象T
。它 将迭代器返回到范围中第一次出现的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;
}
}
这次尝试是否正确?返回类型是否适合该功能或者我的想法是错误的?
答案 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;
}