イテレータと逆イテレータに関する最後の質問を踏まえて、カスタム クラスの実装が機能するようになりました...同じコンテナを反復処理する を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
いる s があるため、 にも注意してください。const_iterator
ありがとう!!