- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个算法,我目前使用两个无符号整数作为位图来存储有关输入的信息;这将最大输入大小限制为 64,因此我想创建一个版本,其中整数由位集或简单的大整数替换。我开始使用 vector
我需要的操作:
创建它们时,我知道最大位数,但一开始我只需要 1 位;然后,在每一步中,一组向左移动,而另一组将添加一个新的最高位:
{
a <<= 1;
a[0] = x;
b[++msb] = y;
if (a < b) b = a;
}
如果我创建大小为 1 的位集,然后逐渐扩展它们,与我立即将长度设置为最大值并可能有数千个前导零相比,比较可能会更快?
那么我应该继续使用 vector
使用 vector
std::vector<bool> a(0), b(0);
然后像这样执行上面提到的操作:
{
a.push_back(x);
b.insert(b.begin(), y);
if (a < b) b = a;
}
最佳答案
我认为 boost::dynamic_bitset
就是您所追求的。
这是一个满足您要求的示例:
#include <iostream>
#include <boost/dynamic_bitset.hpp>
int main() {
boost::dynamic_bitset<> a(3, 2); // a = 010
a[0] = true; // a = 011
a.push_back(true); // a = 1011
boost::dynamic_bitset<> b = a; // b = 1011
a <<= 1; // a = 0110
bool aless = a < b; // true
unsigned long al = a.to_ulong(); // al = 6
std::cout << "a=" << a << ", al=" << a.to_ulong() << "\n"
<< "b=" << b << ", bl=" << b.to_ulong() << "\n"
<< "a<b=" << (a<b) << "\n";
}
一些注意事项:
dynamic_bitset<>(1, 1)
.遗憾的是没有 initializer_list
构造函数所以你不能只做 a = {true}
.也许最清楚的事情是默认构造对象和 push_back(true)
在单独的一行上。push_back
影响最高有效位,即左边的值。这是因为“front”表示元素 0,即最低有效位。a.push_back(false)
(你推送的值并不重要,因为它很快就会被丢弃)。a <<= 1
a[0] = x
如果您想设置新值。to_ulong()
仅当对象具有足够少的元素以适合 unsigned long
时才有效在你的平台上。请注意,它不是 unsigned long long
。 ,所以即使在 64 位系统上,它也可能是 32 位的。any()
, all()
和 count()
.关于c++ - 简单大整数的位集、bool vector 或 int vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46331998/
我正在尝试使用 y 组合器在 Scala 中定义 gcd: object Main { def y[A,B]( f : (A => B) => A => B ) : A => B = f(y(f)
我正在尝试了解返回指向函数的指针的函数,在我尝试编译代码后,它给了我这种错误: cannot convert int (*(int))(int) to int (*(int))(int) in ass
所以我一直在关注 youtube 上的游戏编程教程,然后弹出了这段代码:bufferedImageObject.getRGB(int, int, int, int, int[], int, int);
我正在将时间现在 与存储在数据库某处的时间进行比较。数据库中存储的时间格式为“yyyyMMddHHmmss”。例如,数据库可能会为存储的时间值返回 201106203354。然后我使用一个函数将时间现
例如 Maze0.bmp (0,0) (319,239) 65 120 Maze0.bmp (0,0) (319,239) 65 120 (254,243,90) Maze0.bmp (0,0) (
评论 Steve Yegge的post关于 server-side Javascript开始讨论语言中类型系统的优点和这个 comment描述: ... examples from H-M style
我正在研究 C 的指针,从 Deitel 的书中我不明白 int(*function)(int,int) 和 int*function(int, int) 表示函数时。 最佳答案 C 中读取类型的经验
您好,我使用 weblogic 11g 创建 war 应用程序,我对 joda time 的方法有疑问 new DateTime(int, int, int, int, int, int); 这抛出了
Create a method called average that calculates the average of the numbers passed as parameters. The
var a11: Int = 0 var a12: Int = 0 var a21: Int = 0 var a22: Int = 0 var valueDeterminant = a11 * a12
我正在为一个项目设置 LED 阵列。我得到了一个 LED 阵列,可以根据引脚变化电压进行更改,但我无法添加更多引脚。 当我尝试时,编译失败并显示错误:函数“int getMode(int, int,
除了创建对列表执行简单操作的函数之外,我对 haskell 还是很陌生。我想创建一个列表,其中包含 Int 类型的内容, 和 Int -> Int -> Int 类型的函数. 这是我尝试过的: dat
这个问题已经有答案了: Java add buttons dynamically as an array [duplicate] (4 个回答) 已关闭 7 年前。 StackOverFlow问题今天
我有几个 EditText View ,我想在其中设置左侧的图像,而 setCompoundDrawablesWithIntrinsicBounds 似乎不起作用。图形似乎没有改变。 有人知道为什么会
#include using namespace std; int main() { static_assert(is_constructible, int(*)(int,int)>::val
fun sum(a: Int, b: Int) = a + b val x = 1.to(2) 我在找: sum.tupled(x),或者 sum(*x) 当然,以上都不能用 Kotlin 1.1.3
有一个函数: func (first: Int) -> Int -> Bool -> String { return ? } 返回值怎么写?我对上面 func 的返回类型感到很困惑。 最
type foo = A of int * int | B of (int * int) int * int 和 (int * int) 有什么区别?我看到的唯一区别在于模式匹配: let test_
我正在尝试制作一个 slider 游戏。在这个类中,我使用 Graphics 对象 g2 的 drawImage 方法来显示“拼图”的 block 。但在绘制类方法中,我收到此错误:找不到符号方法dr
我试着理解这个表达: static Func isOdd = i => (i & 1) == 1; 但是这是什么意思呢? 例如我有 i = 3。然后 (3 & 1) == 1 或 i = 4。然后
我是一名优秀的程序员,十分优秀!