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

时间:2012-07-08 11:49:39

标签: c++ stl iterator

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

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

4 个答案:

答案 0 :(得分:5)

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

struct Iterator : IteratorBase {
  SomeType x;
};

完全相同
class Iterator : public IteratorBase{
 public:
  SomeType x;
};

答案 1 :(得分:4)

这是在标准 24.2 中定义的,其中描述了<iterator>标头struct。这个选择可能是因为迭代器提供了对容器元素的访问并使它们class无用,唯一的区别是class默认具有private访问级别,而{{1} } struct访问级别。

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

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

答案 2 :(得分:0)

谁告诉你迭代器是由struct定义的?在标准中没有任何关于它。 Struct和class只有一个区别 - 默认情况下访问元素。因此,在struct中,默认情况下,访问是公共访问,默认情况下,访问是私有访问。

答案 3 :(得分:0)

喜欢最好的答案

除了access之外,

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{}