gpt4 book ai didi

c++ - reverse_iterator 适配器

转载 作者:可可西里 更新时间:2023-11-01 18:36:17 28 4
gpt4 key购买 nike

我正在尝试为我的迭代器和 const_iterator 类实现反向迭代器适配器,但遇到了一些麻烦。如果有人可以指导我解决这个问题,将不胜感激!

我的想法是我应该能够从我的 rbegin() 和 rend() 函数调用中创建一个反向迭代器

reverse_iterator rbegin();
reverse_iterator rend();
const_reverse_iterator rbegin() const;
const_reverse_iterator rend() const;

我在类里面使用了以下 typedef:

typedef btree_iterator<T> iterator;
typedef const_btree_iterator<T> const_iterator;
typedef reverse_btree_iterator<iterator> reverse_iterator;
typedef reverse_btree_iterator<const_iterator> const_reverse_iterator;

如您所见,我希望能够使用模板创建反向迭代器,为 reverse_iterator 类提供迭代器或 const_iterator。

不幸的是,我卡在了这一点上......

下面是我目前的类定义,有错误。

template <typename I> class reverse_btree_iterator {

typedef ptrdiff_t difference_type;
typedef bidirectional_iterator_tag iterator_category;

public:

reverse_btree_iterator() : base_(I()) {}
template <typename T> reverse_btree_iterator(const btree_iterator<T>& rhs) : base_(rhs) {}

I base() { return base_; }

I::reference operator*() const;
I::pointer operator->() const;
I& operator++();
I operator++(int);
I& operator--();
I operator--(int);
bool operator==(const I& other) const;
bool operator!=(const I& other) const;

private:

I base_;

};

我以前从未使用过这样的模板,所以很可能我完全误解了它们的使用方式......

由于 I 可以是迭代器或 const_iterator,所以引用和指针的类型定义在两个类之间有所不同。未编译的行是:

I::reference operator*() const;
I::pointer operator->() const;

如果我不能执行 I::reference 和 I::pointer,我不确定我还能如何使一个 reverse_iterator 类同时适用于 iterator 和 const_iterator。我还尝试在它们前面添加模板,因为它们在迭代器类中定义为(例如):

typedef T*                            pointer;
typedef T& reference;

最佳答案

reference 和 pointer 是从属名,所以你必须使用

typename I::reference operator*() const;
typename I::pointer operator->() const;

此外,构造函数应该只接受I

但是,根本就没有必要写这个类。标准库有 reverse_iterator为了这。或者,如果您对此不满意,还有 Boost.ReverseIterator .

只需要

typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;

关于c++ - reverse_iterator 适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7847789/

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