gpt4 book ai didi

c++ - 给定我的自定义 const_iterator 实现自定义 const_reverse_iterator

转载 作者:行者123 更新时间:2023-11-30 04:20:42 27 4
gpt4 key购买 nike

鉴于我的last question在迭代器和反向迭代器上,我现在有一个工作 const_iterator我的自定义类的实现...我现在想创建一个 const_reverse_iterator它遍历同一个容器。

我实现了我的 const_iterator喜欢

class const_iterator : public std::iterator<T, std::bidirectional_iterator_tag>
{
...
// operator overloads *, ++, --, ==, !=, e.g.
uint32_t operator*() const;
...
};

我有一个 typedef :

typedef std::reverse_iterator<const_iterator> const_reverse_iterator;

现在,我的 crbegin()crend()实现看起来像这样(我认为不正确的地方):

const_reverse_iterator crbegin() const
{
return const_reverse_iterator(this->cend());
}

const_reverse_iterator crend() const
{
return const_reverse_iterator(this->cbegin());
}

问题:在我的测试中,以下工作正常:

for(const_iterator i = line.cbegin(); i != line.cend(); ++i)
{
std::cout << static_cast<char>(*i); // Display as a 'char' for testing purposes
}

但是用下面的代码:

for(const_reverse_iterator i = line.crbegin(); i != line.crend(); ++i)
{
std::cout << static_cast<char>(*i); // Why won't you display as a 'char' from 'unint32_t' like 'const_iterator' does??
}

我在 std::cout 上收到以下错误行:

error: invalid static_cast from type 'std::bidirectional_iterator_tag' to type 'char'|

这是创建无障碍的有效方法吗 reverse_iterators

我觉得我遗漏了一些简单的东西,但我搜索得很远,我找不到一个例子来展示如何在 std::reverse_iterator<ITERATOR_TYPE> 上调用构造函数。模板化类。

预先感谢您的客气话和建议。

编辑:

仅供引用,下面的解决方案,我不得不改变:

class const_iterator : public std::iterator<T, std::bidirectional_iterator_tag>

class const_iterator : public std::iterator<std::bidirectional_iterator_tag, const T>

让它发挥作用。另请注意 const因为我有 const_iterator这是我正在处理的。

谢谢!!

最佳答案

您已经特化了 iterator错误地颠倒了值类型和迭代器类别。应该是:

class const_iterator : public std::iterator<std::bidirectional_iterator_tag, T>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

因此,虽然 const_iterator直接使用它时工作正常,任何依赖于它的特性的东西,例如使用 <algorithm> , 或 std::reverse_iterator , 会失败。

关于c++ - 给定我的自定义 const_iterator 实现自定义 const_reverse_iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15114680/

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