public: typedef other_class::const_iterator my_class::const_

public: typedef other_class::const_iterator my_class::const_iterator - acceptable?

本文关键字:const class my iterator other typedef public      更新时间:2023-10-16

我正在寻找一种方法来使用std::set::const_iterator作为我自己类的const_iterator。

我的代码(实际上行为正确且编译良好)如下:

class MyClass{
public:
    typedef std::set<T>::const_iterator const_iterator;
const_iterator begin() const {
    return mySet->begin();
}
const_iterator end() const {
    return mySet->end();
}
}; // MyClass
所以,我的问题是:我使用const_iterator的方式是可以接受的,并且也是STL预期的形式吗?

Edit:如何对嵌套容器的迭代器进行类型定义?

使用内部类型的想法是使泛型代码可以使用您的类,而无需事先了解实现。重点是存在一个const_iterator,并且它具有常量迭代器的语义。从内部类型借用迭代器这一事实只是调用代码不应该关心的实现细节。

也就是说,问题不在于定义const_iterator内部类型,因为这将增加用户代码中的耦合,他们将不得不显式地使用std::set<T>::const_iterator,而这反过来又使成员的类型成为接口的一部分(即,您不能在不破坏用户代码的情况下更改成员的实现)。

看看其他c++标准库容器适配器,如std::queuestd::queue只是底层容器(默认为std::deque)之上的适配器。

这正是在那些适配器中使用的方法。考虑到这一点,我认为你的实现是好的。

当然可以。您可以将std::set<T>::const_iterator存储在您喜欢的任何地方,并且可以为该类型创建别名。

它没有特别封装,但却是一种完全有效的技术。