C++;相当于Java';s链表/C#和#x27;什么是数组列表?

C++;相当于Java';s链表/C#和#x27;什么是数组列表?,c#,java,c++,oop,arraylist,C#,Java,C++,Oop,Arraylist,是否有一个STL容器或其他东西提供与Java的链表或C#的数组列表相同的功能?i、 e将不同类型追加到同一数组中,如 List.Append(1); List.Append("I am a string"); List.Append(True); 和动态功能,如 List.Resize(); List.GetSize(); 等等 如果没有,你能用模板等自己实现一个吗。?如果是这样的话,怎么做?首先,C#中的ArrayList和Java中的LinkedList是根本不同的野兽(一个实现可调整大

是否有一个STL容器或其他东西提供与Java的链表或C#的数组列表相同的功能?i、 e将不同类型追加到同一数组中,如

List.Append(1);
List.Append("I am a string");
List.Append(True);
和动态功能,如

List.Resize();
List.GetSize();
等等


如果没有,你能用模板等自己实现一个吗。?如果是这样的话,怎么做?

首先,C#中的
ArrayList
和Java中的
LinkedList
是根本不同的野兽(一个实现可调整大小的数组,另一个实现链表)

其次,C#(但不是Java)中的
ArrayList
不受欢迎;使用通用的
列表
(在您的情况下,使用
列表

第三,这对应于C++。 如果需要在其中插入不同的类型,您有三个基本选择:

  • 使用
  • 使用
  • 使用公共基类。在95%的情况下,这是最明智的选择

使用模板很难实现这一点,因为模板假定成员为单一类型。在C++中,你必须使用多态性(具有java和C++语言中的一个公共源)作为一个公共类的“对象”父级,IMHO。
您可以尝试使用boost库和
boost::variant
boost::any
()来完成此操作。

您可以将std::list与boost.variant组合为类型T。

然后使用std::list。
看看boost主页的链接。

如果所有数据都在类层次结构中,那么可以使用std::list或指向根类的指针向量(裸指针或智能指针)


如果没有,则需要使用适配器使它们显示为同一类别,例如,然后列出这些类别。e、 g.
std::list

或某种变体类OK,假设我有一组从同一基类继承的对象。如果我使用运行时多态性,我将能够使用基类指针将所有元素添加到单个数组中。但是,他们不是只能执行基类中定义的方法而不能执行自己的方法吗?@burningprodigy-是的,如果您使用运行时多态性,这将是您的限制。您可以使用
dynamic\u cast
切换类型,但这有点难看。潜在的需求是什么?@littleadv是一个rpg磁砖引擎。tiles[i].image=spriteset[i].image所有精灵都是从精灵基类继承的。但是我不能把它们装进精灵里array@burningprodigy:哦,天哪,为什么你需要不同的课程?“他们有这样完全不同的行为吗?”使用一个共同的基类。“请看我对littleadv答案的评论。@burningprodigy那么问题出在哪里?”?如果您有一个公共基类
Sprite
,那么只需使用Sprite指针向量即可。您遇到的问题(无法调用子类方法)与C#和Java中的问题相同,并且显示了您的体系结构中的缺陷。