声明泛型迭代器
Declaring a generic iterator
>我有以下问题:我需要创建一个函数,该函数接受两个迭代器和一个值,并检查是否在两者之间找到该值。问题:我只能有一个模板参数,它表示迭代器中元素的类型和值。
我的尝试是这样的,但似乎不起作用:
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;
}
你能有一个迭代器类型的模板参数吗?㞖:
template <typename It>
typename std::iterator_traits<It>::value_type
myFind(It begin, It end, typename std::iterator_traits<It>::value_type elem){
// ...
}
否则,我觉得你的限制太强了。
编辑后:如果要对返回的迭代器执行-
(如注释所示),则需要随机访问迭代器。但是,std::list::iterator
是双向迭代器,因此不能。您将需要使用std::prev
(或者在 C++03 中使用 std::advance)。
相关文章:
- 在 stl 映射和列表 (c++) 上进行迭代的泛型循环
- 后缀运算符链表泛型节点迭代器
- 声明一个模板函数,该函数接收两个泛型迭代器作为参数
- 声明泛型迭代器
- 定义用于迭代不同容器类型的泛型转换迭代器
- 泛型"out of bounds"、"past end"迭代器
- C++泛型迭代器
- 泛型/多态迭代器
- 如何接受泛型迭代器
- C#指针、迭代器和泛型
- 模板泛型树类的模板迭代器的c++操作符重载
- 在泛型类中获取泛型容器的迭代器:如何
- 从泛型函数返回迭代器
- 使用迭代器的泛型构造函数
- 泛型迭代器/指针初始化
- 为泛型函数定义自定义迭代器特征
- 为泛型数据类型创建自己的迭代器
- c++迭代器在一个泛型函数中列出
- 泛型c++多维迭代器
- 如何将基于泛型迭代器的算法与基于实现的算法结合起来?