gpt4 book ai didi

c++ - 迭代器类别

转载 作者:搜寻专家 更新时间:2023-10-31 00:48:26 25 4
gpt4 key购买 nike

在代码中:

//I know that to get this effect (being able to use it with std algorithms) I can inherit like I did in line below:

class Iterator //: public std::iterator<std::bidirectional_iterator_tag,T>

{
private:
T** itData_;
public:
//BUT I WOULD LIKE TO BE ABLE TO DO IT BY HAND AS WELL
typedef std::bidirectional_iterator_tag iterator_category;
typedef T* value_type;//SHOULD IT BE T AS value_type or T*?
typedef std::ptrdiff_t difference_type;
typedef T** pointer;//SHOULD IT BE T* AS pointer or T**?
typedef T*& reference;//SHOULD IT BE T& AS reference or T*&?
};

基本上我要问的是,如果我在迭代器类中有类型为 T** 的变量,是否正确假设此迭代器的值类型将是 T* 等等,正如我在代码注释中所描述的那样,就在下一个到相关行。
谢谢。

最佳答案

标准(第 24.3.2 节)中的定义是:

template<class Category, class T, class Distance = ptrdiff_t,
class Pointer = T*, class Reference = T&>
struct iterator {
typedef T value_type;
typedef Distance difference_type;
typedef Pointer pointer;
typedef Reference reference;
typedef Category iterator_category;
};

如您所见,默认值是:

typedef T value_type;
typedef ptrdiff_t difference_type;
typedef T* pointer;
typedef T& reference;

这是假设迭代是在 T 类型元素的容器上进行的。如果您的容器包含 T* 类型的元素,那么您问题中的 typedef 就是正确的。

关于c++ - 迭代器类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2663156/

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