0

誰もが知っているように:プログラムを動的にするために、C /C++でリンクリストを作成することは可能です。しかし今、私はc++で「リンクされたクラス」をプログラミングしています。親クラスの「GAME」には、可変数の要素が必要です。そして、各要素はクラスです。だから私はこれをプログラムしました:

class GAME : public LEVEL
{  private:
     ELEMENT *startPointer;
   public:
     GAME()
     {    startPointer=NULL;
     }
     initGame()
     {    p=aStartPointer;
          while(p!=NULL);//This loop is based on a linked list, so its dynamic
          {   startPointer=new ELEMENT(startPointer);
              p=p->next;
          }
     }
}


class ELEMENT
{   private:
        ELEMENT *next;
    public:
        ELEMENT(ELEMENT* nextPointer)
        {    next=nextPointer;
        }
}

私の問題:リンクされたクラスについて聞いたことがなく、それを使用すべきかどうかわかりません。
プロのプログラマーはそのような方法を使用しますか(そしてそれは役に立ちますか?)、またはこれを行うためのより良い方法がありますか?

4

3 に答える 3

2

これを行うためのより良い方法はありますか?

はい。これが1つです:

class GAME : public LEVEL
{  private:
     std::vector<ELEMENT> elements;
   ...
};

標準ライブラリコンテナを使用します。

  • 通常、を使用しますstd::vector<>
  • 独自性が必要な場合は、std::set<>
  • 要素をキーに関連付ける必要がある場合は、std::map<>
  • コンテナからアイテムを頻繁にまたは非常に迅速に挿入または削除する必要がある場合は、std::list<>またはstd::set<>
  • 他にも考慮事項があります。標準のコンテナを効果的に使用する方法については、良い本を参照してください。
于 2012-11-01T18:39:35.737 に答える
0

さまざまなタイプのオブジェクトインスタンスを含むことができるコンテナ(つまり、不均一なコンテナ)を作成しようとしている場合、いくつかのアプローチがあります(通常、コンテナを均質化する必要があります)。ハンドルをベースに格納できるように、共通ベースクラスを設定することもできます。もう1つのオプションは、識別された共用体です。

他の投稿が述べているように、他のものを使用する本当に正当な理由がない限り、コンテナ自体はおそらくSTLコンテナである必要があります(それでも、「より標準的な」方が良いです。自作は、そうでない限り、良い考えではありません。教育目的のみ)。

于 2012-11-01T18:41:12.783 に答える
0

別の名前でリンクリストを実装しようとしているようです。より良い設計は、リストまたはベクトルをクラスELEMENTSの基本機能にするのではなく、クラスのメンバーとして使用して格納することGAMEです。

これにより、コンテナのようなオブジェクトとアプリケーションクラスを分離できます。

于 2012-11-01T18:42:15.763 に答える