在FreePascal中等效于C ++ std :: vector,std :: deque和std :: map

时间:2015-03-18 05:32:29

标签: containers freepascal delphi

ObjectPascal(FreePascal编译器)中的std::vectorstd::dequestd::map相当于什么?

简而言之:

  • (vector)是一个自动调整大小的连续数组

  • (deque)是一个自动调整大小的混合数组,提供近似O(1)随机数 从任一端允许O(1)推/弹时访问

  • (map,unordered_map)是一个关联数组

1 个答案:

答案 0 :(得分:4)

一般来说,假设在某种不同的语言中存在直接替代是不合逻辑的。

目前,FPC泛型是旧式C ++的混合,如泛型(基于令牌重放),Delphi更多.NET样式泛型(完全声明,但对于没有自动装箱的语言的值类型更有限)。

无论如何,我试一试:

  1. TList或其通用变体。 (TLI<> in Delphi或fgl.Tf * List in unit fgl)
  2. 没有标准类型,我有一个数组泛型类的数组,但是它被优化以避免一些有序列表(插入性能)的问题,同时仍然是一个有序类型。我已将它放在http://www.stack.nl/~marcov/genlight.pas上,也许它会为您提供有关如何解决问题的一些想法。
  3. 还没有。 TDictionary一旦提交http://bugs.freepascal.org/view.php?id=27206。目前通常使用TAVLTree。
  4. 还有一些泛型,包括package / fcl-stl中的简单deque,我建议你看一下。