鉴于我关于迭代器和反向迭代器的最后一个问题,我现在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
我正在处理的 s。
谢谢!!