给出两个长度为'n'的bitset对象'B1'和'B2'。什么是有效的方式来说明'B2'中设置的所有位是否也在'B1'?
示例:
B1 = 110111
B2_bad = 011001
B2_good = 100001
那么,'B1'和'B2_good'是好的但不是'B1'和'B2_bad'?
答案 0 :(得分:0)
嗯,我想以下两种方法可能有所帮助。您可能需要对它们进行基准测试,因为它更快。
std::bitset<6> B1 (std::string("110111"));
std::bitset<6> B2_bad (std::string("011001"));
std::bitset<6> B2_good (std::string("100001"));
//////////////One way/////////////////////////
if ( (~B1 &= (B2_bad)).any()) std::cout << "No" << std::endl;
else std::cout << "Yes" << std::endl;
if ( (~B1 &= (B2_good)).any()) std::cout << "No" << std::endl;
else std::cout << "Yes" << std::endl;
///////////////Second way//////////////////
int i =0;
for (i = 0; i < B1.size(); ++i) if (B2_bad[i] == 1 && B1[i] == 0) break;
if (i == B1.size()) std::cout << "Yes" << std::endl;
else std::cout << "No" << std::endl;
for (i = 0; i < B1.size(); ++i) if (B2_good[i] == 1 && B1[i] == 0) break;
if (i == B1.size()) std::cout << "Yes" << std::endl;
else std::cout << "No" << std::endl;`
可能比我更熟练的人可以评论他们的表现。但我最好的猜测是第一种方法利用库函数,它应该提供最佳性能,但是如果你的大多数查询都有'结果否'而B1-B2不会在早期位之一上达成一致,那么第二种方法可能会有更好的运行时间。因为,涉及的库函数具有最差的运行时复杂度O(n)。