[英]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::variant
或boost::any
( 選擇適合您需要的)。
首先, ArrayList
中的 ArrayList 和 Java 中的LinkedList
是根本不同的野獸(一個實現了可調整大小的數組,而另一個實現了鏈表)。
其次,不推薦使用ArrayList
(但不是 Java)中的 ArrayList; 改用通用List<T>
(在您的情況下為List<object>
)。
第三,這對應於 C++ 中的std::vector
。
如果您需要在其中插入不同的類型,您有三個基本選擇:
您可以使用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.