从另一个类调用迭代器构造函数

Calling iterator constructor from another class

本文关键字:迭代器 构造函数 调用 另一个      更新时间:2023-10-16

我试图将graph类写为模板类。正如问题中所回答的那样,我试图用std::set来实现graph,以下是我到目前为止所写的内容。

    #include <set>
    template <class T, 
            class Container = std::set<T> >
    class graph {
    public:
        class iterator { 
        public:
            iterator() {
                std::set<T>::iterator();
            }
            iterator(const iterator&) {
                std::set<T>::iterator();
            }
            ~iterator() {
                std::set<T>::~iterator();
            }

我在这里寻找的是每当graph::itertor被调用时,内部应该调用set::iterator,这种方法是否可以,以及为什么~iterator()没有被编译。

我认为你想为你的graph类提供迭代器,而graph的迭代器只不过是底层容器类型的迭代器。如果是,那么你应该这样做,

template <class T,  class Container = std::set<T> >
class graph 
{
public:
    typedef typename Container::iterator iterator;
    typedef typename Container::const_iterator const_iterator;
    //...
};

至于你的代码,我想说std::set<T>::iterator()创建了一个临时对象,而这个临时对象在完整表达式的末尾被销毁。故事到此结束。std::set<T>::~iterator()甚至不能编译