C ++相当于Java的Linked List / C#的Array List?

时间:2011-07-12 08:37:23

标签: c# java c++ oop arraylist

是否存在STL容器或其他与Java的链接列表或C#的阵列列表具有相同功能的容器?即将不同类型附加到相同的数组中,如

List.Append(1);
List.Append("I am a string");
List.Append(True);

和动态函数如

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

等?

如果没有,你可以自己使用模板等实现吗?如果是这样,怎么样?

5 个答案:

答案 0 :(得分:7)

使用模板很难实现这一点,因为模板为成员假设了一种类型。在C ++中,你必须使用多态与一个公共源(在Java和C#中可用作所有类的常见“对象”父级,恕我直言)。

您可以尝试使用提升库以及boost::variantboost::anychoose which one fits your needs)。

答案 1 :(得分:4)

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

其次,不推荐使用C#中的ArrayList(但不是Java中的{1}};请改用通用List<T>(在您的情况下,使用List<object>)。

第三,这与C ++中的std::vector相对应。

如果您需要在其中插入不同的类型,您有三个基本选择:

答案 2 :(得分:1)

您可以使用boost::any,然后使用std :: list 请查看提升主页的examples

答案 3 :(得分:0)

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

答案 4 :(得分:0)

Java / C#通过拥有一个所有类派生自的Object类来管理它。 C ++没有这个root。

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

如果没有,那么您需要使用适配器使它们看起来是同一个类,例如boost::variant然后列出这些。例如std::list<boost::variant>