2

我有一些关于 STL 迭代器实现的小问题。

  • 为什么将迭代器定义为结构而不是类?
  • 主要原因是什么?
4

4 回答 4

5

这是一种实施选择。 classstruct中几乎相同C++,区别在于默认访问说明符和继承,对于类是私有的,对于结构是公共的。因此,如果一个类型几乎不需要私有数据成员,那么将其实现为结构可能更有意义。但是您可以将完全相同的类型实现为:

struct Iterator : IteratorBase {
  SomeType x;
};

完全一样

class Iterator : public IteratorBase{
 public:
  SomeType x;
};
于 2012-07-08T11:51:52.003 回答
4

这是在标准24.2中定义的,它描述了<iterator>标题,它们是struct. 之所以做出这种选择,可能是因为迭代器提供了对容器元素的访问,并且使它们class毫无用处,唯一的区别是默认情况下class具有访问级别private,而struct具有public访问级别。

因此,如果声明迭代器class而不是struct

  • make all members public, 没有用, 直接 make 也可以达到同样的效果struct.
  • 制作吸气剂,这将提供不必要的开销和抽象。
于 2012-07-08T11:55:49.713 回答
0

谁说你迭代器是由结构定义的?在标准方面,它没有任何内容。结构和类只有一个区别——默认访问元素。因此,在结构中默认访问是公共的,而在类中默认访问是私有的。

于 2012-07-08T11:51:37.103 回答
0

喜欢最好的答案

除了访问之外,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{}
于 2012-07-08T16:31:48.683 回答