C++ 用位实现集合
我正在阅读关于在以下位置以位表示的集合C++ 用位实现集合,c++,algorithm,bitwise-operators,C++,Algorithm,Bitwise Operators,我正在阅读关于在以下位置以位表示的集合 class SetAsBitVector:公共集 { typedef无符号整数字; 枚举{wordBits=bitsizeof(Word)}; 阵列向量; 公众: SetAsBitVector(无符号整数); // ... }; SetAsBitVector::SetAsBitVector(无符号整数n): 集合(n), 向量((n+字位-1U)/字位) { //这里有问题吗? for(无符号整数i=0;i我将此标记为C++,因为它显然不是C. 循环。考
class SetAsBitVector:公共集
{
typedef无符号整数字;
枚举{wordBits=bitsizeof(Word)};
阵列向量;
公众:
SetAsBitVector(无符号整数);
// ...
};
SetAsBitVector::SetAsBitVector(无符号整数n):
集合(n),
向量((n+字位-1U)/字位)
{
//这里有问题吗?
for(无符号整数i=0;i 向量[项目/词位]=1>移位〉=1<P>我将此标记为C++,因为它显然不是C.</P>
循环。考虑如果调用它的代码为“<代码> N< /代码>等于小于代码> WordBoe<代码>。泛型公式正是所使用的公式,即<代码> B=(A+Q—1)/Q < /代码>确保<代码> B*Q至少是<代码> A<代码> >
基本的二进制算术,二除等于向右移位,以此类推
在某些机器上,移位和掩码等位运算比除法和模运算快
关于问题1,是否存在任何通用公式?关于第二个问题,移位和掩码的值是多少?请在此处进行elobarate
class SetAsBitVector : public Set
{
typedef unsigned int Word;
enum { wordBits = bitsizeof (Word) };
Array<Word> vector;
public:
SetAsBitVector (unsigned int);
// ...
};
SetAsBitVector::SetAsBitVector (unsigned int n) :
Set (n),
vector ((n + wordBits - 1U) / wordBits)
{
// Question here?
for (unsigned int i = 0; i < vector.Length (); ++i)
vector [i] = 0;
}
void SetAsBitVector::Insert (Object& object)
{
unsigned int const item = dynamic_cast<Element&> (object);
vector [item / wordBits] |= 1 << item % wordBits;
// Question here
}