我正在寻找一种方法来使用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意图形式?
上的相关问题和答案答案 0 :(得分:2)
拥有内部类型的想法是,通用代码可以在不事先了解实现的情况下使用您的类。重点是存在const_iterator
,并且它具有常量迭代器的语义。您从内部类型借用迭代器这一事实只是一个调用代码不应该关心的实现细节。
也就是说,问题不在于定义const_iterator
内部类型,因为这会增加用户代码中的耦合,他们必须明确地使用std::set<T>::const_iterator
,而这反过来会使类型接口的成员部分(即,您不能再在不破坏用户代码的情况下更改成员的实现)。
答案 1 :(得分:1)
查看其他C ++标准库容器适配器,例如std::queue
。 std::queue
只是一个基础容器顶部的适配器(默认为std::deque
)。
这正是这些适配器中使用的方法。鉴于此,我会说你的实施很好。
答案 2 :(得分:1)
是的,当然。你可以在任何你喜欢的地方存储一个std::set<T>::const_iterator
,并且制作一个类别的别名就更好了。
答案 3 :(得分:1)
它不是特别封装的,而是一种非常有效的技术。