我有一些关于 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
而不是struct
:
public
, 没有用, 直接 make 也可以达到同样的效果struct
.谁说你迭代器是由结构定义的?在标准方面,它没有任何内容。结构和类只有一个区别——默认访问元素。因此,在结构中默认访问是公共的,而在类中默认访问是私有的。
喜欢最好的答案
除了访问之外,class和struct是相同的。所以使用struct或class没有太大区别。
我们知道 C++ 是包含 C
使用 struct 看起来很简单,并且区分了 struct 和 class。
这是迭代器的定义
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{}