2

我正在用 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*手动将其转换为。有没有一种优雅的方式来做到这一点?或者使用嵌套类只是乞讨时的错误。

4

1 回答 1

0

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

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

于 2013-08-25T02:27:56.747 回答