22、SeqAn3中的容器与视图

SeqAn3中的容器与视图

1. 容器

1.1 位压缩容器

在C++中,单个对象若单独存储,至少需要一个字节的内存空间。但实际上,几乎所有字母表都可以用更少的位来表示。因此,通过位压缩存储可以节省大量的存储空间,即不单独存储元素,而是以压缩形式存储。

可以使用 seqan3::bitcompressed_vector 来实现这一点,它的接口与 std::vector 几乎相同。不过,由于元素不是相邻存储的(它们被压缩了),这种类型仅满足 std::ranges::random_access_range 概念,而不满足更强的 std::ranges::contiguous_range 概念。位压缩向量要求其元素是字母表类型,并且可以默认构造(所有容器都有此要求)。

在SeqAn2中,有类似的类型 seqan::String<T, seqan::Packed<THostSpec>> 。SeqAn3的实现内部使用了SDSL库中的 sdsl::int_vector ,但提供了完整的容器接口,并能进行与秩的转换(转换后的秩存储在 sdsl::int_vector 中)。当调用容器的 operator[] 或解引用其迭代器时,会返回一个代理类型,该类型派生自实际的字母表类型(并且可以转换为该类型),但提供了自定义的赋值运算符,以便正确更新底层数据。这与访问 seqan3::alphabet_tuple_ba

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值