OCCT中的容器

本文主要对OCCT8的容器做一个系统介绍,主要介绍各容器对应的底层结构,以及相关容器之间的关系。

容器分组

数组

  • NCollection_Array1<TheItemType>:一维数组,同C++的std::array
  • NCollection_Array2<TheItemType>:二维数组,基于NCollection_Array1实现

动态数组

  • NCollection_Vector = NCollection_DynamicArray : 动态数组,同C++的std::vector

链表

  • NCollection_List:单向链表,同C++的std::forward_list
  • NCollection_Sequence:双向链表,同C++的std::list

集合

  • NCollection_Map:哈希集合,同C++的std::unordered_set
  • NCollection_IndexedMap:在NCollection_Map基础上为每个元素维护一个索引号,可以通过索引号快速定位键
  • NCollection_DoubleMap:双边哈希映射,双向绑定和查询

字典

  • NCollection_DataMap:哈希字典,同C++的std::unordered_map
  • NCollection_IndexedDataMap:在NCollection_DataMap基础上为每个元素维护一个索引号,可以通过索引号快速定位键

其它容器

  • NCollection_SparseArray:稀疏数组
  • NCollection_Vec2:通用二维向量
  • NCollection_Vec3:通用三维向量
  • NCollection_Vec4:通用四维向量
  • NCollection_PackedMap:针对整数类型进行内存优化的集合

OCCT8引入的新容器

  • NCollection_OrderedMap:在NCollection_Map基础上维护一个双向链表,用于维护元素的顺序,可顺序遍历,不同C++的std::set
  • NCollection_OrderedDataMap:在NCollection_DataMap基础上维护一个双向链表,可顺序遍历,不同C++的std::map
  • NCollection_FlatDataMap:连续空间字典
  • NCollection_FlatMap:连续空间集合
  • NCollection_KDTree:KD树
  • NCollection_UBTree:非平衡树
  • NCollection_LinearVector:绝对连续空间的动态数组

集合的常见计算

  • 并集(Union)

  • 交集(Intersection)

  • 差集(Subtraction)

  • Difference

以下接口可用,是NCollection_MapAlgo命名空间内的方法:

1
2
3
4
5
6
7
8
9
10
11
#include <NCollection_MapAlgo.hxx>

NCollection_Map<int> map1, map2, map3, map4, map5, map6;
map1.Add(1);
map1.Add(2);
map2.Add(2);
map2.Add(3);
NCollection_MapAlgo::Union(map3, map1, map2);
NCollection_MapAlgo::Intersection(map4, map1, map2);
NCollection_MapAlgo::Subtraction(map5, map1, map2);
NCollection_MapAlgo::Difference(map6, map1, map2);

(转载本站文章请注明作者和出处lihaohello.top,请勿用于任何商业用途)