c++ - boost::dynamic_bitset 结果与 std::vector 不一致?
问题描述
我查看了 boost 的实现,dynamic_bitset
发现他们比较了底层整数存储类型以提高operator<
性能,我用下面的代码测试了正确性并得到了不一致的结果。这是一个错误吗?
std::vector<bool> v1, v2;
v1.push_back(0); v1.push_back(1);
v2.push_back(1); v2.push_back(0);
std::cout << (v1 < v2) << '\n';
boost::dynamic_bitset<> b1, b2;
b1.push_back(0); b1.push_back(1);
b2.push_back(1); b2.push_back(0);
std::cout << (b1 < b2) << '\n';
我希望两者的输出都是1
,但第二个输出是0
.
解决方案
查看从最高有效位到最低有效位的位集
#include <iostream>
#include <boost/dynamic_bitset.hpp>
int main(int, char*[]) {
boost::dynamic_bitset<> x(5); // all 0's by default
x[0] = 1;
x[1] = 1;
x[4] = 1;
std::cout << x << "\n";
return EXIT_SUCCESS;
}
输出是
10011
运算符<<
for dynamic_bitset
打印从最重要到最不重要的位集,因为这是大多数人习惯阅读的格式。
这就是你正在做的
b1.push_back(0); b1.push_back(1);//b1 = 10
b2.push_back(1); b2.push_back(0);//b2 = 01
升压是正确的。您应该更改push_back
s 的顺序以获得您想要的。
促进
推荐阅读
- angular - Angular 10 Flex 布局 + 材料设计组件
- angular - 条件语句在 Angular ngIf 中不起作用
- ruby-on-rails - ActiveRecord::StatementInvalid: PG::UndefinedTable: 错误: 关系“通道”不存在
- php - 文件获取内容
- date - 在 SQL Server 中使用年、周和闰年
- python - 在python中对文件名列表进行数字排序
- python - 在矩阵中打印嵌套字典 - python
- html - 当屏幕太小时,HTML 列表项在彼此下方移动
- node.js - 如何缩小和丑化用 Typescript 编写的 NPM 包?
- node.js - express-graphql 对 ios apollo 客户端无法读取错误的错误返回 500 状态。解决方案?