reverse_iterator adapter
reverse_iterator adapter
我正在尝试为我的迭代器和const_iterator类实现一个反向迭代器适配器,这有点麻烦。如果有人能引导我通过这一点,那将是非常感激!
这个想法是我应该能够从我的rbegin()和rend()函数调用中创建一个反向迭代器reverse_iterator rbegin();
reverse_iterator rend();
const_reverse_iterator rbegin() const;
const_reverse_iterator rend() const;
我在类中使用以下类型定义:
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类同时适用于迭代器和const_iterator。我还尝试在这些前面添加模板,因为它们在迭代器类中定义为(例如):
typedef T* pointer;
typedef T& reference;
引用和指针是相互依赖的名称,所以必须使用
typename I::reference operator*() const;
typename I::pointer operator->() const;
另外,构造函数应该只接受I
.
所需要的只是
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
此外,您忘记为其他相同类型的反向迭代器提供比较操作符。
相关文章:
- 在调试模式下引发C++ "deque iterator not dereferencable"异常
- std::iterator::reference 必须是引用吗?
- 为什么unordered_set<string::iterator>不起作用?
- 造成致命错误:boost/fusion/iterator/equal_to.hpp 没有这样的文件或目录
- Visual accept std::string from std::byte iterator
- 什么是"std::set<int,int>::iterator"?
- 从 std::vector 中删除项目时"Iterator not incrementable"
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- 空集"Out of bound iterator"
- 如何使用set<pair<int,int> >::iterator itrator it迭代set<pair<int,int> >st中的值?
- 给定一个类型为 Container:<T>:Iterator 的函数参数,如何为某些类型的 T 实现特定的重载?
- 带升压async_read_some "String iterator not dereferncable"
- C++为什么"deque iterator not dereferencable "
- 错误:与'operator='不匹配(操作数类型为"std::map<int、double>::iterator
- 自动,错误:MAP ITERATOR没有名为“ First”的成员
- set<shared_ptr<T>>::iterator to set<shared_ptr<t const>>::const_iterator
- 标准::复制失败,"cannot seek vector iterator after end"
- 如何将STD :: Iterator与基本类型Uint8_t**使用
- Gnu 的 <Iterator>reverse_iterator::运算符>和代理迭代器
- "Deque iterator not dereferencable"错误