学习 LLVM(18) SetVector

本文介绍了 LLVM 项目中的 SetVector 类,这是一种能保持元素插入顺序的集合类。它通过结合 SmallSet 和 std::vector 来实现这一特性。此外还讨论了 SmallSetVector 的应用场景,即在元素数量较少时可避免额外的内存分配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件位于 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,这有点奇怪。

转载于:https://my.oschina.net/u/232554/blog/42890

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值