模板化迭代器声明

时间:2016-03-30 00:32:58

标签: c++ templates iterator

我必须创建一个适用于矢量,链表和双链表的通用函数。 我想使用迭代器来解析以查找val是否在向量,链表或双链表中。 我只是不知道如何声明泛型迭代器。以下是我对宣言的尝试。

template <class Container, class T>
void findValue(Container &x, const T &val){
std::x<T>::iterator it;
}

1 个答案:

答案 0 :(得分:0)

由于C ++容器定义了嵌套类型iterator,您可以使用typename Container::iteratorfindValue函数中声明迭代器(尽管auto也可以正常工作)。也不需要将T作为单独的模板参数,因为您可以使用typename Container::value_type

template<typename Container>
void findValue(Container& x, const typename Container::value_type & val)
{
    // could use 'typename Container::iterator' instead of 'auto'
    for (auto it = begin(x); it != end(x); ++it)
    {
        if (*it == val)
        {
            std::cout << "found " << val << std::endl;
            break;
        }
    }
}