gpt4 book ai didi

C++ 泛型迭代器

转载 作者:太空狗 更新时间:2023-10-29 23:30:13 24 4
gpt4 key购买 nike

我不确定我能够找到的答案是否是完成所需任务的最简单方法。我知道如何修改为我的问题的完整解决方案的简单模板将是完成以下任务的代码:

  1. 将两个指向包含值类型 T 的可迭代容器( vector 、列表...)的开始和结束的迭代器作为输入。

  2. 返回 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com