可变大小的位集[重复]
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
,而不是任何其他类型以上是关于可变大小的位集[重复]的主要内容,如果未能解决你的问题,请参考以下文章