STLイテレータの実装について少し質問があります。
- なぜイテレータはクラスとしてではなく構造体として定義するのですか?
- 主な理由は何ですか?
これは実装の選択です。 class
とstruct
はほぼ同じC++
ですが、デフォルトのアクセス指定子と継承が異なります。これらはクラスではプライベートで、構造体ではパブリックです。したがって、型にプライベートデータメンバーがほとんど必要ない場合は、構造体として実装する方が理にかなっている場合があります。ただし、次のいずれかとまったく同じタイプを実装できます。
struct Iterator : IteratorBase {
SomeType x;
};
とまったく同じです
class Iterator : public IteratorBase{
public:
SomeType x;
};
これは、ヘッダーを記述する標準24.2で定義されています。この選択はおそらく、イテレーターがコンテナー要素へのアクセスを提供し、それらを作成しても役に立たないために行われました。唯一の違いは、デフォルトでアクセス レベルがあるのに対し、アクセス レベルがあることです。<iterator>
struct
class
class
private
struct
public
class
したがって、代わりにイテレータを宣言する場合、2 つの選択肢がありましたstruct
。
public
これは、直接作成しても同じ効果が得られるため、役に立ちませんstruct
。イテレータは構造体によって定義されると誰が言いますか?標準では、それについては何もありません。構造体とクラスの違いは1つだけです。つまり、デフォルトで要素にアクセスできます。したがって、構造体ではデフォルトでアクセスはパブリックであり、クラスではデフォルトでアクセスはプライベートです。
ベストアンサーいいね
クラスと構造体は、アクセスを除いて同じです。したがって、構造体を使用するか、クラスを使用しても、大きな違いはありません。
C++にはCが含まれていることがわかっています
構造体の使用は単純に見え、構造体とクラスを区別しています。
これはイテレータの定義です
struct output_iterator_tag{}
struct input_iterator_tag{}
struct forward_iterator_tag : public input_iterator_tag {};
struct bidirectional_iterator_tag : public forward_iterator_tag{}
struct random_accessl_iterator_tag : public bidirectional_iterator_tag{}