boost::dynamic_bitset 结果与 std::vector<bool> 不一致?
boost::dynamic_bitset inconsistent result with std::vector<bool>?
我查看了 dynamic_bitset
的 boost 实现,发现它们比较底层整数存储类型以提高 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
打印从 most-significant 到 least-significant 的位集,因为这是大多数人阅读时使用的格式。
这就是你在做的事情
b1.push_back(0); b1.push_back(1);//b1 = 10
b2.push_back(1); b2.push_back(0);//b2 = 01
提升是正确的。
您应该更改 push_back
s 的顺序以获得您想要的。
Boost
我查看了 dynamic_bitset
的 boost 实现,发现它们比较底层整数存储类型以提高 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
打印从 most-significant 到 least-significant 的位集,因为这是大多数人阅读时使用的格式。
这就是你在做的事情
b1.push_back(0); b1.push_back(1);//b1 = 10
b2.push_back(1); b2.push_back(0);//b2 = 01
提升是正确的。
您应该更改 push_back
s 的顺序以获得您想要的。
Boost