0

众所周知:可以使用 C/C++ 创建链接列表以使程序动态化。但是现在,我正在用 C++ 编写一个“链接类”。我的父类“游戏”应该有可变数量的元素。每个元素都是一个类。所以我编程了这个:

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

有没有更好的方法来做到这一点?

是的。这是一个:

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

如果您尝试创建一个可以包含不同类型对象实例的容器(即非同质容器),则有几种方法(通常涉及同质化容器)。您可以设置一个公共基类,以便您可以将句柄存储到基类。另一种选择是歧视性工会。

正如其他帖子所提到的,容器本身可能应该是一个 STL 容器,除非您有充分的理由使用其他东西(即使那样,“更标准”越好;自制不是一个好主意,除非它是仅用于教育目的)。

于 2012-11-01T18:41:12.783 回答
0

看起来您正在尝试以不同的名称实现链接列表。更好的设计是使用列表或向量作为类的成员来存储ELEMENTS而不是让它成为GAME类的基本功能。

这允许您在类容器对象和您的应用程序类之间进行分离。

于 2012-11-01T18:42:15.763 回答