如果我在堆栈上使用位集,则可以执行以下操作:
std::bitset<8> bset_s;
bset_s.flip(1);
std::cout << "Bitset on stack: " << bset_s << std::endl;
std::cout << "Element 1: " << bset_s[1] << std::endl;
输出:Bitset on stack: 00000010
Element 1: 1
但是当我尝试在堆上分配位集时:std::bitset<8> * bset;
bset = new std::bitset<8>;
bset->flip(1);
std::cout << "Bitset on heap: " << * bset << std::endl;
std::cout << "Element 1: " << bset[1] << std::endl;
输出:Bitset on heap: 00000010
Element 1: 00000000
如果尝试访问第二个位,则会得到一个空的位集,而不是“1”。我究竟做错了什么? 最佳答案
bset[1]
等效于*(bset + 1)
,因为bset
是一个指针。这是取消引用您不拥有的内存,因此该程序的行为是不确定的。
您需要(*bset)[1]
。
关于c++ - 如何在C++中的堆上使用位集?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63508512/