作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我不确定我能够找到的答案是否是完成所需任务的最简单方法。我知道如何修改为我的问题的完整解决方案的简单模板将是完成以下任务的代码:
将两个指向包含值类型 T 的可迭代容器( vector 、列表...)的开始和结束的迭代器作为输入。
返回 std::vector<T>
通过从头到尾迭代输入容器,以任何顺序包含输入容器的逐个元素拷贝。
无法运行的东西如下所示:
template<typename Iterator, typename T>
std::vector<T> dumb_copy(Iterator first, Iterator last) { ... }
问题是我需要编译器以某种方式检查我是否得到指向类型 T 的迭代器。
我目前正在学习 C++ 并将我能想到的某些算法的最通用实现作为练习编写,因此我想从一开始就获得最佳实践。如果有一种使用 C++11 构造来执行此操作的简单方法,那对我来说很好。
最佳答案
您可以简单地使用 traits 完全删除 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;
}
特别注意 std::iterator_traits
在迭代器类型是指针时有一个特殊化,所以这将允许你的函数“正常工作”,即使它传递的是指针而不是“true"迭代器对象。
关于C++ 泛型迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27712701/
我是一名优秀的程序员,十分优秀!