学习 LLVM(18) SetVector

文件位于 llvm/include/llvm/[[ADT]]/SetVector.h

* 文件说明: Set with insert order iteration -- 可以按照插入顺序迭代的集合。
* 参见:http://llvm.org/docs/ProgrammersManual.html#dss_setvector


== 定义的类 ==
* SetVector
* SmallSetVector

== 模板类 SetVector ==
这个适配器类提供一个事物的集合,并且可以以确定的顺序迭代(遍历)。迭代序是插入的顺序。

template <T, VEC, SET> class SetVector {// 注1:模板参数 VEC, SET
  SET set_    // 使用 SET 保存集合数据
  VEC vec_    // 使用 VECtor 保存数据的插入顺序

  type,reference,pointer,iterator 等标准容器类型定义
  
  this() // 多种构造函数。
  empty(),size(),begin(),end(),front(),back(),[] 等容器方法
  insert(),remove(),count(),clear(),pop_back() 等容器方法
}

 * 注1:VEC 缺省为 std::vector<T>;SET 缺省为 SmallSet<T, 16>
* 考虑到内部使用 set,vector 保存了两份数据,也许比较耗费空间。而且在 vector 中查找(remove 时候会查找)也是线性的,也即时间也耗费。。。

== 模板类 SmallSetVector ==
一个 SetVector,其在元素数量比较少的时候不用进行内存分配。和前面见过的 Small 系列的容器语义应该一致。

<syntaxhighlight lang="cpp">
template <T, N> class SmallSetVector :
  public SetVector<T, SVec, SSet>   // 注1
{
  this() // 构造
}
</syntaxhighlight>

* 注1:SVec 是 SmallVector<T, N>; SSet 是 SmallSet<T, N>。都为数量较少的情况进行了优化。但是 SetVector 中 Set 缺省就是 SmallSet,这有点奇怪。

你可能感兴趣的:(llvm)