FreePascal 中 C++ std::vector、std::deque 和 std::map 的等价物
Equivalent of C++ std::vector, std::deque and std::map in FreePascal
在 ObjectPascal(FreePascal 编译器)中 std::vector
、std::deque
和 std::map
的等价物是什么?
简而言之:
(vector) 是一个自动调整大小的连续数组
(deque) 是一个自动调整大小的混合数组,随机数接近 O(1)
访问同时允许 O(1) push/pop 从任何一端
(map, unordered_map) 是一个关联数组
一般来说,假设存在某种不同语言的直接替代是不合逻辑的。
目前 FPC 泛型是老式 C++ 的混合体,如泛型(基于令牌重放)和 Delphi 更多 .NET 风格的泛型(完全声明,但对于没有自动装箱的语言的值类型有更多限制) .
总之,我试试看:
- TList 或其通用变体。 (TList<> in Delphi or fgl.Tf*List in unit fgl)
- 没有标准类型,我有一个泛型数组class,但它经过优化以避免有序列表的一些问题(插入性能),同时仍然是一个有序类型。我已经把它放在 http://www.stack.nl/~marcov/genlight.pas 上了,也许它会给你一些解决问题的想法。
- None还没有。 TDictionary 一旦 http://bugs.freepascal.org/view.php?id=27206 被提交。目前一般使用TAVLTree
packages/fcl-stl中还有一些泛型,包括一个简单的双端队列,我建议你看看。
在 ObjectPascal(FreePascal 编译器)中 std::vector
、std::deque
和 std::map
的等价物是什么?
简而言之:
(vector) 是一个自动调整大小的连续数组
(deque) 是一个自动调整大小的混合数组,随机数接近 O(1) 访问同时允许 O(1) push/pop 从任何一端
(map, unordered_map) 是一个关联数组
一般来说,假设存在某种不同语言的直接替代是不合逻辑的。
目前 FPC 泛型是老式 C++ 的混合体,如泛型(基于令牌重放)和 Delphi 更多 .NET 风格的泛型(完全声明,但对于没有自动装箱的语言的值类型有更多限制) .
总之,我试试看:
- TList 或其通用变体。 (TList<> in Delphi or fgl.Tf*List in unit fgl)
- 没有标准类型,我有一个泛型数组class,但它经过优化以避免有序列表的一些问题(插入性能),同时仍然是一个有序类型。我已经把它放在 http://www.stack.nl/~marcov/genlight.pas 上了,也许它会给你一些解决问题的想法。
- None还没有。 TDictionary 一旦 http://bugs.freepascal.org/view.php?id=27206 被提交。目前一般使用TAVLTree
packages/fcl-stl中还有一些泛型,包括一个简单的双端队列,我建议你看看。