【发布时间】:2012-12-07 12:27:06
【问题描述】:
我有以下问题:我需要创建一个函数,它接受两个迭代器和一个值,并检查是否在两者之间找到了值。问题:我只能有一个模板参数,它表示迭代器中元素的类型和值。
我的尝试是这样的,但似乎不起作用:
template <typename T>
T myFind(iterator<std::bidirectional_iterator_tag,T> begin, iterator<std::bidirectional_iterator_tag, T> end, T elem){
// Code
}
但这不起作用:
// vector<int> vect; list<string> lst;
myFind(vect.begin(), vect.end(), 15);
myFind(lst.begin(), lst.end(), "some element");
有什么想法吗? 修改后的代码:
template <typename T>
T myFind(T begin, T end,typename std::iterator_traits<T>::value_type elem){
for(T it = begin; it != end; ++it){
if(*it == elem){
return it;
}
}
return end;
}
【问题讨论】:
-
为什么要使用双向迭代器?
-
这是我最后一次尝试完成这项工作的一部分 :)
-
“我只能有一个模板参数”——为什么?这是一个完全愚蠢的限制。
-
@Xeo 但不幸的是,这是我必须遵守的限制。我知道如何用两个模板参数解决这个问题..但不是一个。
-
我不明白这个问题。您已经编写了
std::find的精巧、受限版本。为什么std::find不合适?