C++;相当于Java';s链表/C#和#x27;什么是数组列表?
是否有一个STL容器或其他东西提供与Java的链表或C#的数组列表相同的功能?i、 e将不同类型追加到同一数组中,如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是根本不同的野兽(一个实现可调整大
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%的情况下,这是最明智的选择
您可以尝试使用boost库和
boost::variant
或boost::any
()来完成此操作。您可以将std::list与boost.variant组合为类型T。然后使用std::list。看看boost主页的链接。
如果没有,则需要使用适配器使它们显示为同一类别,例如,然后列出这些类别。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中的问题相同,并且显示了您的体系结构中的缺陷。