最近、クラスでは、リストをたどるSTLイテレータについて教えられました。リンクされたリストのための基本的な反復子に与えられたサンプルコードでは、私は理解できなかった何かを見つけました。C++のイテレータクラスの理解
私たちは2つのイテレータクラス、const_iteratorとiteratorを与えられました。それらは両方ともListクラスのサブクラスでした。 const_iteratorから継承したイテレータイテレータのコンストラクタでは、なぜこのように記述されたのか分かりません。
イテレータクラス:
class iterator:public const_iterator{
friend sortedList
protected:
iterator(Node* n):const_iterator(n){}
public:
iterator(){
n = nullptr;
}
const_iteratorのクラス:
class const_iterator {
friend SortedList
protected:
Node* curr_;
const_iterator(Node* n){
curr_ = n;
}
public:
const_iterator(){
curr_ = nullptr;
}
私の質問は、なぜイテレータがconst_iteratorの継承ず、なぜイテレータのコンストラクタはconst_iteratorののctorのを初期化し、それ自体に何もしません。
イテレーターからcurr_にアクセスする際、どのように参照するのですか?私はcurr_を呼び出すか、this-> curr_を使いますか?
これは標準ライブラリコードではありません。それを理解するためには、あなたが求めている実装の多くをもっと見る必要があります。 –
とにかく、 'iterator'のdefault-ctorが壊れています。 – Deduplicator
const_iteratorから継承する根拠を理解するのに役立つhttps://stackoverflow.com/questions/2844466/can-iterator-type-just-subclass-constiteratorを見ることができます。 IMOの公開継承は、ここでは当てはまらない「公開」情報(すなわち、モデルは多態的に使用されるオブジェクトのための関係)を伝えるために使用されるべきであるため、私は個人的にこの方法を好まない。 –