簡體   English   中英

C++ 等效於 Java 的鏈表/C# 的數組列表?

[英]C++ equivalent of Java's Linked List / C#'s Array List?

是否有 STL 容器或其他提供與 Java 的鏈接列表或 C# 的數組列表相同的功能的東西? 即將不同類型附加到同一個數組中,例如

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

和動態功能,如

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

ETC。?

如果沒有,您可以使用模板等自己實現嗎? 如果是這樣,如何?

使用模板很難實現這一點,因為模板為成員假定單一類型。 在 C++ 中,您必須使用具有公共源的多態性(在 Java 和 C# 中可用,作為所有類的公共“對象”父級)。

您可以嘗試使用 boost 庫和boost::variantboost::any選擇適合您需要的)。

首先, ArrayList中的 ArrayList 和 Java 中的LinkedList是根本不同的野獸(一個實現了可調整大小的數組,而另一個實現了鏈表)。

其次,不推薦使用ArrayList (但不是 Java)中的 ArrayList; 改用通用List<T> (在您的情況下為List<object> )。

第三,這對應於 C++ 中的std::vector

如果您需要在其中插入不同的類型,您有三個基本選擇:

  • 使用Boost.Any
  • 使用Boost.Variant
  • 使用公共底座 class。 在 95% 的情況下,這是最明智的選擇。

您可以使用boost::any和 std::list。
看一下 boost 主頁的例子

您可以將 std::list 與 boost.Variant 組合為類型 T。

Java/C# 通過擁有所有類派生自的 Object class 來管理此問題。 C++ 沒有這個根。

如果您的所有數據都在 class 層次結構中,那么您可以使用指向根 class 的 std::list 或指針向量(裸或智能)。

如果不是,那么您需要使用適配器使它們看起來相同 class 例如boost::variant然后列出這些。 例如std::list<boost::variant>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM