这是boost :: dynamic_bitset的错误吗?

时间:2019-06-13 16:56:50

标签: c++ stdvector boost-dynamic-bitset

我查看了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。

1 个答案:

答案 0 :(得分:2)

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

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="@color/Black">.  </item>
<item android:state_pressed="false" android:color="@color/White"></item>
<item android:state_hovered="false" android:color="@color/Black"></item>
<item android:state_hovered="false" android:color="@color/White"></item>
</selector>

输出为

#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 的运算符<<会将位集从最高有效位打印到最低有效位,因为这是大多数人习惯于阅读的格式。

这就是你在做什么

dynamic_bitset

升压是正确的。 您应该更改b1.push_back(0); b1.push_back(1);//b1 = 10 b2.push_back(1); b2.push_back(0);//b2 = 01 的顺序以得到想要的结果。 Boost