更优雅的方式返回列表的索引

时间:2013-08-25 02:17:50

标签: c++ nested-class

我正在用C ++编写一个圆圈列表。这是我的代码

class CList
{
private:
    class ListNode
    {
    public:
        int v;
        ListNode *prev;
        ListNode *next;
        /*constructor*/
    };
    ListNode *_tail;
public:
    typedef const void* const Index;//need a way to represent something like 'index' or 'position'
    CList():_tail(0)
    {

    }
    void print()const;
    void insert(Index pos, const int &value);
    Index find(/*some condition*/);
};

嵌套类ListNode仅用于实现,因此我不希望CList的用户可以访问ListNode。但由于它是一个列表,用户可以在某个位置插入新节点,因此我添加了成员​​Index(不应修改索引!)。但这是愚蠢的,我必须手动将其转换为ListNode*。有一种优雅的方式来做到这一点?或者使用嵌套类只是乞讨时的错误。

1 个答案:

答案 0 :(得分:0)

用于处理容器中位置的规范C ++方法当然是使用迭代器。迭代器可以在内部保存指向ListNode的指针,并使用取消引用operator*()operator->()来访问给定位置的元素。两个迭代器可比较以确定它们是否指向相同的位置(即,指向相同的内部ListNode)。除find()操作外,insert()操作还可以提供迭代器。 ...当然,erase()成员可以使用迭代器来删除元素。

要完全支持find(),您还需要某种指示符,例如,指向null而不是ListNode的单数迭代器,以指示该元素不是{&1;}。找到了。

相关问题