如何将迭代器用作模板参数并返回其值
How to use iterator as a template parameter and return its value?
说我想写这样的函数:
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;
}
相关文章:
- 使用作为参数返回的指针的最佳做法是什么
- 有没有办法根据 lambda 参数返回类型部分专用化我的模板化函数?
- 如何通过函数参数返回指向不规则数组的指针
- void 函数中的指针参数返回不一致的值
- 如何修复用于根据参数返回不同类型的模板类中的错误C2679?
- 是否可以通过引用通过参数返回参考
- 在C++中,如何根据类中的参数返回不同的泛型类型
- 如何根据枚举参数返回其他类型
- GoogleMock,按参数返回和正常返回,消耗数组
- 功能是否有可能使用其参数返回指针
- 推论成员函数参数 /返回类型
- C++ 基于模板参数返回类型的模板函数
- 参考参数返回副本
- 根据模板参数返回有价值的
- std::string 应该按函数的值返回还是按"std::string &s"作为参数返回?
- 将适当类型的迭代器作为参数返回适当类型的STL容器
- 根据参数返回类型
- 如何实现模板函数从模板参数返回向量
- 如何根据模板参数返回不同的类型
- 我可以从引用传递的参数返回值中声明const int吗