首页 > 解决方案 > 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.

标签: c++stdvectorboost-dynamic-bitset

解决方案


查看从最高有效位到最低有效位的位集

#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_backs 的顺序以获得您想要的。 促进


推荐阅读