我有一个算法,我目前使用两个无符号整数作为位图来存储有关输入的信息;这将最大输入大小限制为 64,因此我想创建一个版本,其中整数被位集或简单的大整数替换。我开始使用vector<bool> 写一些东西,但是环顾四周,我看到很多答案告诉我要避免使用vector<bool>。
我需要的操作:
- 初始化为全零。
- 左移(乘以 2)并设置新的 lsb。
- 添加并设置 msb。
- 比较两组以首先找到最小/字典顺序。
创建它们时,我知道最大位数,但起初我只需要 1 位;然后,在每一步,一组左移,而另一组将添加一个新的最高位:
{
a <<= 1;
a[0] = x;
b[++msb] = y;
if (a < b) b = a;
}
如果我创建大小为 1 的位集,然后逐渐扩展它们,也许比较会比我立即将长度设置为最大值并可能有数千个前导零更快?
那么我应该继续使用 vector<bool> 还是使用 std::bitset (不幸的是它是固定大小的)或者编写一个简单的 biginteger 实现,该实现能够使用无符号整数向量完成上述操作?
使用 vector<bool> 您可以初始化长度为零的向量:
std::vector<bool> a(0), b(0);
然后像这样执行上面提到的操作:
{
a.push_back(x);
b.insert(b.begin(), y);
if (a < b) b = a;
}