我对STL迭代器实现有一些小问题。
答案 0 :(得分:5)
这是一个实现选择。 class
和struct
在C++
中几乎相同,不同的是默认访问说明符和继承,它们是用于类的私有和用于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
可以获得相同的效果。答案 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{}