- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
跟进 How does one store a vector<bool> or a bitset into a file, but bit-wise?
基本上,我使用以下代码将位集编写为二进制文件:
boost::dynamic_bitset<boost::dynamic_bitset<>::block_type> filter;
vector<boost::dynamic_bitset<>::block_type> filterBlocks(filter.num_blocks());
//populate vector blocks
boost::to_block_range(filter, filterBlocks.begin());
ofstream myFile(filterFilePath.c_str(), ios::out | ios::binary);
//write out each block
for (vector<boost::dynamic_bitset<>::block_type>::iterator it =
filterBlocks.begin(); it != filterBlocks.end(); ++it)
{
//retrieves block and converts it to a char*
myFile.write(reinterpret_cast<char*>(&*it),
sizeof(boost::dynamic_bitset<>::block_type));
}
myFile.close();
我用动态bitset和to_block_range的方法变成一个临时 vector ,然后打印出 block 到文件中。它有效,但当我使用中间 vector 时,我的内存使用量加倍(使用的 vector 与我的位集大小相同)。如何在不增加内存使用量的情况下将位集打印到文件?
如果我能以 block 的形式遍历 bitset 就好了,但似乎为了防止一些其他问题,dynamic bitset 的作者故意省略了这种功能。我应该使用不同的数据结构吗?如果它对上下文有帮助,我将在一些布隆过滤器代码中使用位集。
最佳答案
你应该手动完成。迭代这些位,将它们打包成 unsigned char
s 和 stream.put
将字符放入文件中。
直接写原生block_type
导致文件格式依赖于平台特定的字节顺序,这通常是不可取的。 (并将 block_type
设置为 char
会损害性能。)
看看您的其他问题,我发现这与 Nawaz 的建议相同,您可能想返回使用 std::vector<bool>
相反。
关于C++ 将 dynamic_bitset 存储到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13504314/
我希望生成一个 boost::dynamic_bitset 散列,以便我可以将值存储在 boost::bimaps 中。我尝试了以下代码,Test code here. #include #incl
我正在尝试使用 set的 dynamic_bitset对象,但我在运行时遇到断言失败: a.out: boost/dynamic_bitset/dynamic_bitset.hpp:1291: bo
我正在尝试使用 set的 dynamic_bitset对象,但我在运行时遇到断言失败: a.out: boost/dynamic_bitset/dynamic_bitset.hpp:1291: bo
我是 boost 的新手。我有一个使用 dynamic_bitset 的程序在 lambda 函数中。在我尝试运行该程序后,我收到了这条消息。即使没有初始化 bitset 的函数也会出现此消息以及处理
是否有一种干净的方法来返回 boost::dynamic_bitset 对象的反向排序? 例如:01001100成为00110010。我能想到的最简单的解决方案是将 bitset 转换为字符串,将字符
是否有一种干净的方法来返回 boost::dynamic_bitset 对象的反向排序? 例如:01001100成为00110010。我能想到的最简单的解决方案是将 bitset 转换为字符串,将字符
我正在尝试使用 boost::dynamic_bitset,如下所示: #include class Bitmap { public: Bitmap(std::size_t size = _si
我有这个功能: void SetCode(dynamic_bitset<> * c) { this->_code = c; this->_size = c->size(); }
我使用 boost::dynamic_bitset 来跟踪多个 tcp 连接。如果已连接,则设置为1,否则设置为0。并且每个连接是一个线程。我是否需要保护位集不受多线程影响?还是没有必要,因为它在创建
我有一个巨大的位集,代表一个 74MB 文件的所有位。我正在使用压缩算法来创建此位集的压缩字符串表示形式。然后我需要将该字符串存储到另一个动态位集中,以便以后可以解压缩。我的问题是,无论我如何尝试从字
我正在使用 C++ boost 的 dynamic_bitset。 我已经分配了一个变量,我只想更改它的值 - 像从构造函数中一样从“unsigned long”重新构造它,但我不想再次分配内存或创建
我很难理解 boost::dynamic_bitset 或 std::vector 在内部做什么。我最终想要做的是组成一个网络框架并通过套接字发送它,但我无法以保持我组装的位顺序的方式转换它们....
跟进 How does one store a vector or a bitset into a file, but bit-wise? 基本上,我使用以下代码将位集编写为二进制文件: boost:
我想以一种不会降低性能的方式连接一个大的位集和一个较小的位集。目前,我的应用程序仅在以下代码中就花费了 20% 的 CPU 时间: boost::dynamic_bitset<> encode(con
Dynamic bitset 我有一个需要填充的用例 boost::dynamic_bitset , from a std::string buffer. 你能建议如何去做吗?所以我需要想出一个函数
如何使用 boost::dynamic_bitset 成员序列化一个类? #include #include #include #include #include class A {
我有一个 boost dynamic_bitset我正在尝试从中提取设置位: boost::dynamic_bitset myBitset(1000); 我的第一个想法是对每个索引做一个简单的“转储”
我有一个 7 字节/56 位位集,在构造时将第一个位设置为一个: boost::dynamic_bitset<> b(56, 1); 构造后,我想将一个整数值(比如 2019)放入第 4 位到第 15
有什么办法可以逆序遍历boost::dynamic_bitset吗?我的意思是我们通常通过 find_first() 找到第一个设置位,然后使用 find_next() 继续。 是否有相应的 find
根据所有初步迹象,boost dynamic_bitset只是标题。 documentation暗示它只是标题: The class dynamic_bitset is defined in the
我是一名优秀的程序员,十分优秀!