gpt4 book ai didi

c++ - 用整数值更新dynamic_bitset

转载 作者:行者123 更新时间:2023-12-02 10:32:06 26 4
gpt4 key购买 nike

使用dynamic_bitset可以基于整数值(下面的5、124)进行初始化。
是否可以使用整数值进行更新?

创建新的dynamic_bitset时,以下解决方案在每次更新时分配堆内存。
这是一个较差的解决方案(速度慢,可能出现堆碎片等)。

    std::vector<boost::dynamic_bitset<uint8_t>> data;
data.push_back(boost::dynamic_bitset<uint8_t>(4, 5));
data.push_back(boost::dynamic_bitset<uint8_t>(7, 124));

for(const auto& s: data)
std::cout << s << std::endl;

for(int i; i<10; i++)
{
data[0]=boost::dynamic_bitset<uint8_t>(4, i);

for(const auto& s: data)
std::cout << s << std::endl;
}


关于如何在不设置每个位的情况下从int更新值的任何想法?

最佳答案

也许您可以从阻止列表中进行初始化:

for(uint8_t i = 0; i<10; i++) {
data[0].clear();
data[0].init_from_block_range(&i, &i+1);
}

但是,由于似乎断言该位集在初始化之前是清楚的,因此使用具有相同效果的 append()会更自然(并且最终需要8位以上时可能会有更多好处):

Live On Coliru
#include <boost/dynamic_bitset.hpp>
#include <iostream>
using BSet = boost::dynamic_bitset<uint8_t>;
using Block = BSet::block_type;

int main() {
std::vector<BSet> data;
data.emplace_back(4, 5);
data.emplace_back(7, 124);

auto& a = data[0];
auto& b = data[1];

std::cout << a << "\t" << b << "\n----\n";

for(Block i = 0; i<10; i++)
{
a.clear();
a.init_from_block_range(&i, &i+1);

b.clear();
b.append(i);

std::cout << a << "\t" << b << "\n";
}
}

版画
0101    1111100
----
00000000 00000000
00000001 00000001
00000010 00000010
00000011 00000011
00000100 00000100
00000101 00000101
00000110 00000110
00000111 00000111
00001000 00001000
00001001 00001001

Note add .resize(4) to limit the capacity

I'm not sure whether this function should have been part of the public interface (it looks like it might not), but you apparently can use

    c.clear();
c.dispatch_init(4, i, {});

See it Live On Coliru as well

关于c++ - 用整数值更新dynamic_bitset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61864414/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com