文件位於 llvm/include/llvm/[[ADT]]/SetVector.hhtml
* 文件說明: Set with insert order iteration -- 能夠按照插入順序迭代的集合。
* 參見:http://llvm.org/docs/ProgrammersManual.html#dss_setvector函數
== 定義的類 ==
* SetVector
* SmallSetVector優化
== 模板類 SetVector ==
這個適配器類提供一個事物的集合,而且能夠以肯定的順序迭代(遍歷)。迭代序是插入的順序。this
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 時候會查找)也是線性的,也即時間也耗費。。。code
== 模板類 SmallSetVector ==
一個 SetVector,其在元素數量比較少的時候不用進行內存分配。和前面見過的 Small 系列的容器語義應該一致。htm
<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,這有點奇怪。
rem