为什么迭代器定义为结构而不是类
why iterator defining as a struct but not as class?
我对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
,这是无用的,因为直接使其成为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{}
相关文章:
- C++结构编译器错误询问向量的迭代器
- 如何使用迭代器指向结构体c++的向量
- 为结构的向量创建C 矢量迭代器
- 用于隐藏结构细节的迭代器适配器
- 如何从数据结构的向量中收集迭代器
- 当迭代器添加到添加到列表向量的结构时,迭代器停止指向值?
- 创建自定义迭代器结构以与CSTDIO一起使用
- 正在取消引用自定义结构字段的迭代器
- 结构"node"的迭代器不允许数据检索
- 如何让Lua迭代器返回C结构
- 给定同一数据结构的两个迭代器,如何检查哪个迭代器在另一个之前
- STL如何用非线性数据结构实现反向迭代器去引用
- 使用迭代器访问结构元素
- 为什么迭代器定义为结构而不是类
- 集合数据结构中的 end() 迭代器应该返回什么
- 如何从 STL 列表中的迭代器访问指向结构的指针而不是其元素
- 如何将迭代器类型转换为其原始结构
- 如何使用 STL 迭代器处理结构
- C++ 如何在结构向量的一个字段上创建迭代器
- C++:如何将迭代器设置为另一个列表中的结构内的列表