C+中的链接类+;? 众所周知,用C++实现LIKES列表是为了使程序动态化。 但现在,我正在编程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; } }

C+中的链接类+;? 众所周知,用C++实现LIKES列表是为了使程序动态化。 但现在,我正在编程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; } },c++,class,linked-list,C++,Class,Linked List,我的问题是:我以前从未听说过链接类,我不确定是否应该使用它。 专业程序员使用这种方法吗(有用吗?),还是有更好的方法 有没有更好的方法 对。这里有一个: class GAME : public LEVEL { private: std::vector<ELEMENT> elements; ... }; 类游戏:公共级别 {私人: std::向量元素; ... }; 使用标准库容器: 通常,使用std::vector 如果需要唯一性,请使用std::set 如果

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

有没有更好的方法

对。这里有一个:

class GAME : public LEVEL
{  private:
     std::vector<ELEMENT> elements;
   ...
};
类游戏:公共级别
{私人:
std::向量元素;
...
};
使用标准库容器:

  • 通常,使用
    std::vector
  • 如果需要唯一性,请使用
    std::set
  • 如果需要将元素与键关联,请使用
    std::map
  • 如果需要经常或快速地从容器中插入或删除项目,请使用
    std::list
    std::set
  • 还有其他考虑。查阅一本好书,了解如何有效使用标准容器

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


正如其他帖子所提到的,容器本身可能应该是STL容器,除非你有很好的理由使用其他容器(即使这样,“越标准越好;自制不是一个好主意,除非它仅用于教育目的).

看起来您正在尝试使用其他名称实现一个链接列表。更好的设计是使用列表或向量作为类的成员来存储
元素
,而不是将其作为
游戏
类的基本功能


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

专业程序员使用标准容器,如
std::vector
std::list
。专业程序员不会编写自己的链表实现,至少如果他们想为我工作的话不会。一般来说,如果您认为应该使用
std::list
,请重新考虑。@Yakk+1:我记得有一次关于MSVC STL实现性能分析的谈话;他们发现,由于引用的局部性,即使在列表理论上比向量更好的情况下,也令人惊讶的是,你要推动列表真正开始“投资回报”有多么荒谬。