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ないようにします。しかし、それはリストなので、ユーザーは新しいノードをどこかの位置に挿入できるので、メンバーを追加します(インデックスは変更しないでください!)。しかし、それはばかげているので、手動でキャストする必要があります。これを行うエレガントな方法はありますか?または、ネストされたクラスを使用することは、物乞いの間違いです。CListListNodeIndexListNode*

4

1 に答える 1

0

コンテナ内の位置を処理する標準的な C++ の方法は、もちろんイテレータを使用することです。イテレータは、内部的にポインタを保持し、間接参照をListNode使用して、指定された位置にある要素へのアクセスを提供できます。2 つの反復子を比較して、それらが同じ場所 (つまり、同じ internal ) を指しているかどうかを判断します。操作とは別に、操作は反復子を提供することもできます。...そしてもちろん、メンバーはイテレータを使用して要素を削除できます。operator*()operator->()ListNodefind()insert()erase()

完全にサポートするには、要素が見つからなかったことを示すfind()ために、 a ではなく null を指す単一イテレータなど、何らかのインジケータも必要です。ListNode

于 2013-08-25T02:27:56.747 に答える