JT1*_*JT1 2 c++ generics iterator
我不确定我能找到的答案是否是我所需要的最简单方法.我知道如何修改为我的问题的完整解决方案的简单模板将是完成以下操作的代码:
将两个迭代器作为输入,指向包含值类型为T的东西的可迭代容器(vector,list ...)的开头和结尾.
std::vector<T>通过从开头到结尾迭代输入容器,以任何顺序返回包含输入容器的逐个元素的副本.
不起作用的东西如下:
template<typename Iterator, typename T>
std::vector<T> dumb_copy(Iterator first, Iterator last) { ... }
Run Code Online (Sandbox Code Playgroud)
问题是我需要编译器以某种方式检查我是否给出了指向T类型的迭代器.
我目前正在学习C++并将实践编写为我能想到的某些算法的最通用实现,所以我想从一开始就获得最佳实践.如果使用C++ 11构造有一种简单的方法,那对我来说没问题.
您可以简单地使用特征T完全删除类型,允许自动确定:
template <typename Iterator>
std::vector<typename std::iterator_traits<Iterator>::value_type>
dumb_copy(Iterator first, Iterator last)
{
std::vector<typename std::iterator_traits<Iterator>::value_type> copy;
// Populate the copy vector
return copy;
}
Run Code Online (Sandbox Code Playgroud)
特别要注意,std::iterator_traits当迭代器类型是一个指针时,它有一个特化,所以这将允许你的函数"正常工作",即使它是传递指针而不是"true"迭代器对象.