我有一些关于STL迭代器实现的小问题。
- 为什么迭代器被定义为结构体而不是类?
- 主要原因是什么?
这是一种实现选择。 C++
中,class
和struct
几乎相同,区别在于默认的访问权限和继承方式,class为private, struct为public。因此,如果一个类型没有很多私有数据成员,则将其实现为结构体可能更合适。但是,你可以将完全相同的类型实现为以下两者之一:
struct Iterator : IteratorBase {
SomeType x;
};
与...完全相同
class Iterator : public IteratorBase{
public:
SomeType x;
};
<iterator>
header,它们是 struct
。这个选择可能是因为迭代器提供对容器元素的访问,使它们成为 class
将是无用的,唯一的区别在于 class
默认具有 private
访问级别,而 struct
具有 public
访问级别。
所以如果将迭代器声明为 class
而不是 struct
,就有两种选择:
public
,这是无用的,因为可以通过直接设置为 struct
来获得相同的效果。像最佳答案一样
类和结构体除了访问权限之外是相同的,因此使用结构体或类没有太大区别。
我们知道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{}