为什么迭代器定义为结构而不是类

why iterator defining as a struct but not as class?

本文关键字:结构 迭代器 定义 为什么      更新时间:2023-10-16

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

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

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

struct Iterator : IteratorBase {
  SomeType x;
};

与完全相同

class Iterator : public IteratorBase{
 public:
  SomeType x;
};

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

因此,如果声明迭代器class而不是struct,则有两种选择:

  • 使所有成员成为public,这是无用的,因为直接使其成为struct可以获得相同的效果
  • 生成getter,这将提供不必要的开销和抽象

谁说迭代器是由struct定义的?在standart中什么都没有。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{}