可变大小的位集[重复]

Posted

技术标签:

【中文标题】可变大小的位集[重复]【英文标题】:Variable size bitset [duplicate] 【发布时间】:2013-01-04 05:05:00 【问题描述】:

我正在练习一个关于数组的问题,我必须在其中找到独特的元素。现在为此,我的逻辑是找到数组中的最大元素并为此定义位集。但问题是 bitset 需要一个常量值,所以如何克服这个问题,下面是我的一些问题:

a) 我可以用可变大小定义位集吗? b) 如果不是,那么使用vector<bool>vector<char> 的最佳方法是什么? c) 我知道 boost 有一个动态的位集,但是当我这样做是为了学习时,我想知道替代方法。

【问题讨论】:

见Boost.DynamicBitset。 【参考方案1】:

std::bitset<N> 模板需要预先固定大小。 std::vector<bool> 是 C++ 标准提供可变长度位向量的方式,它提供的功能类似于可以增长和缩小的位集。

至于使用vector<char>vector<bool> 是好是坏:vector<bool> 是实现这一目标的更直接的方法。我会先使用它,然后如果性能不可接受,则切换到vector<char>。一般来说,最好先尝试编写最干净、最直接的实现,然后再进行优化。

希望这会有所帮助!

【讨论】:

感谢您的快速回复 ..:) ...好的,这意味着只有在事先知道大小的情况下才应使用 bitset ..? @Himank- 这是一个更强有力的声明 - std::bitset 只能在静态知道大小时使用 再次感谢..!还有一个疑问,当我只需要在大小未知时找到唯一的时,对于此类问题,vector(bool) 和 vector(char) 的最佳方法是什么......? @Himank- 正如我的回答中提到的,如果您打算使用位向量,vector<bool> 是一个更合理的起点。仅当您怀疑 vector<bool> 性能不佳时,我才会切换到 vector<char> 关于vector< bool >,您应该知道的另一件事是& v[ n ] - & v[ 0 ] 可以等于n,而不是任何其他类型

以上是关于可变大小的位集[重复]的主要内容,如果未能解决你的问题,请参考以下文章

生成大小为 1 到 n 的所有组合(位集)

Div 并排大小可变,但始终填充 100% [重复]

分配数组 VS。可变长度数组[重复]

在 C++ 中定义一个大的位集

int64 的可变长度二进制补码

在 SSE 中使用位集的实现和性能