c – 迭代器相等

我正在创建一个实现双链表的容器类.

template <class T>
class dl_list {
public:
    class link {
    public:
        T* data;
        link *prev, *next;
    };
    class iterator {
        link* node;
    public:
        link* get_node() { return node; }
        // ++, --, * operators, etc.
    };
    // other stuff
};

非常整洁,我很开心.但是我遇到的一个问题是当我为迭代器类型定义我的相等运算符时,我必须进行模板特化.

template <class T>
bool operator==(typename dl_list<T>::iterator& lhv, typename dl_list<T>::iterator rhv) {
    return lhv.get_node() == rhv.get_node();
}

不会工作,我必须像这样专门化:

bool operator==(typename dl_list<int>::iterator& lhv, typename dl_list<int>::iterator rhv) {
    return lhv.get_node() == rhv.get_node();
}

对于我想要使用它的每种类型,这显然是令人讨厌的原因.我该如何解决这个问题?

解决方法:

使它成为迭代器类的成员:

bool operator==( const interator& other ) const
{
    return node == other.node;
}
上一篇:java – 删除容器中的项目


下一篇:c – 更改给定STL容器的value_type