说我想写一个这样的函数:
template<typename Iterator, typename Iterator_value>
Iterator_value foo(Iterator begin, Iterator end)
{
vector<Iterator*> v(begin, end);
do something
return begin*;
}
这只是一个演示,我知道有很多错误。问题是:
这是一个例子,我想写一个通用的中值函数,我想返回确切的值而不是返回迭代器。像std::find
之类的东西。
而且,我不想修改原始内容,所以我想创建一个向量来复制迭代器值。如何创建仅包含迭代器的向量?
我怎样才能做到这一点?
你可以使用std::iterator_traits
template<typename Iterator>
typename std::iterator_traits<Iterator>::reference
foo(Iterator begin, Iterator end)
{
vector<typename std::iterator_traits<Iterator>::value_type> v(begin, end);
//do something
return *begin;
}
auto
和decltype
是另一种选择:
template<typename Iterator>
decltype(auto) // C++14
foo(Iterator begin, Iterator end)
// or auto foo(..) -> decltype(*begin) in C++11
{
std::vector<std::decay_t<decltype(*begin)>> v(begin, end);
//do something
return *begin;
}