【问题标题】:Linked Class in C++?C ++中的链接类?
【发布时间】:2012-11-01 18:37:05
【问题描述】:

众所周知:可以使用 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;
        }
}

我的问题:我以前从未听说过链接类,我不确定是否应该使用它。
专业程序员是否使用这种方法(有用吗?),还是有更好的方法来做到这一点?

【问题讨论】:

  • 专业程序员使用标准容器,如std::vectorstd::list。专业程序员不会编写自己的链表实现,至少如果他们想为我工作的话。

标签: c++ class linked-list


【解决方案1】:

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

是的。这是一个:

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

使用标准库容器:

  • 一般情况下,使用std::vector&lt;&gt;
  • 如果需要唯一性,请使用std::set&lt;&gt;
  • 如果需要将元素与键关联,请使用std::map&lt;&gt;
  • 如果您需要非常频繁或非常快速地从容器中插入或删除项目,请使用std::list&lt;&gt;std::set&lt;&gt;
  • 还有其他注意事项。查阅一本好书,了解如何有效地使用标准容器。

【讨论】:

  • 作为一般规则,如果您认为应该使用std::list&lt;&gt;,请重新考虑。
  • @Yakk +1:记得讲过一些MSVC STL实现性能分析;他们发现,由于参考的局部性,即使在理论上列表比向量的可扩展性更好的情况下,令人惊讶的是,您必须将列表推到多远才能真正开始“投资回报”。
【解决方案2】:

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

这使您可以将类似容器的对象与您的应用程序类分开。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-10
      • 2012-03-18
      • 2017-06-15
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      相关资源
      最近更新 更多