我正在练习一个关于数组的问题,需要找出其中的唯一元素。我的想法是找到数组中的最大元素,并为其定义一个位集(bitset)。但问题在于,位集需要使用一个常量值,那么如何克服这个问题呢?以下是我对此的一些疑问:
a) 我能否以任何方式使用变量大小来定义位集?
b) 如果不能,那么使用 vector<bool>
或 vector<char>
是最好的方法是什么?
c) 我知道 boost 有一个动态位集,但由于我正在学习,我想知道其他方法。
我正在练习一个关于数组的问题,需要找出其中的唯一元素。我的想法是找到数组中的最大元素,并为其定义一个位集(bitset)。但问题在于,位集需要使用一个常量值,那么如何克服这个问题呢?以下是我对此的一些疑问:
a) 我能否以任何方式使用变量大小来定义位集?
b) 如果不能,那么使用 vector<bool>
或 vector<char>
是最好的方法是什么?
c) 我知道 boost 有一个动态位集,但由于我正在学习,我想知道其他方法。
std::bitset<N>
模板需要提前指定一个固定的大小。而 std::vector<bool>
则是 C++ 标准提供的一种可变长度的二进制向量。它提供了类似于 bitset 的功能,但可以动态增加或缩小。vector<char>
还是 vector<bool>
更好的问题:使用 vector<bool>
是实现目标的更直接方式。我建议先使用它,如果性能不足,则考虑切换到 vector<char>
。一般来说,最好尝试先编写最简洁、最直接的实现,然后再进行优化。std::bitset
只能在静态已知大小的情况下使用。 - templatetypedefvector< bool >
的一件事是 & v[ n ] - & v[ 0 ]
可能不等于 n
,而不是其他任何类型。 - borisbnvector< bool >
可以在一个字节中存储8个值。 - borisbn