- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个巨大的位集,代表一个 74MB 文件的所有位。我正在使用压缩算法来创建此位集的压缩字符串表示形式。然后我需要将该字符串存储到另一个动态位集中,以便以后可以解压缩。我的问题是,无论我如何尝试从字符串填充位集,它总是以相反的顺序填充。
为了简单起见,假设我的压缩字符串是
1110001101010111011101
这是我第一次尝试填充我的输出动态位集:
string compressed = 1110001101010111011101;
output = boost::dynamic_bitset<unsigned char> (compressed);
当我这样做时,我的位集变成了字符串的反转:
1011101110101011000111
然后我尝试了这个:
output = boost::dynamic_bitset<unsigned char> (compressed.begin(), compressed.end());
我得到了完全相同的输出。接下来我尝试使用反向迭代器,我不知道这是怎么可能的,但它以完全相同的方式填充位集:
output = boost::dynamic_bitset<unsigned char> (compressed.rbegin(), compressed.rend());
我可以按照正确的顺序填充我的位集的唯一方法是这样做:
for(uint i = 0; i < compressed.size(); i++)
{
if(compressed[i] == '0')
output.push_back(false);
else output.push_back(true);
}
这会以正确的顺序填充我的输出位集,但是它比使用其他方法慢得多(我使用的字符串慢 30 秒)。我也可以使用 std::reverse 来反转字符串,然后填充位集,但这需要很多额外的时间。有什么方法可以按正常顺序使用字符串中的值有效地填充动态位集?我明白为什么它是反向填充的,但我没有使用我的位集来表示一个整数,我用它来存储文件中的数据,所以我需要它是有序的。然而,为什么使用反向迭代器会产生相同的输出是没有意义的。
编辑我已经截取了我的输出和代码的相关部分。压缩输出显示我的位集压缩版本的前 6000 个字符,存储为字符串。这个字符串本身没有问题。红色下划线是我用来将此字符串存储在 bitset boost::dynamic_bitset 输出中的行。然后,我打印输出位集的前 6000 个字符,它们完全不同。我应该注意到,“输出”位集作为引用参数传递到此函数中,但最初是空的。
最佳答案
根据 documentation boost::dynamic_bitset
的 std::string
构造函数会将输入的最后一个字符分配给最低有效位,这将是索引为 的位0
。
在索引增长的循环中读回它会以相反的顺序给出原始字符串。
迭代器的构造函数会做一些完全不同的事情。他们将每个字符解释为一个整数(字符代码),并将每个整数的二进制表示形式保存到位集中。
考虑到,例如dynamic_bitset
的流输出运算符将从最高有效位开始打印位集,我认为以这种方式存储它没有问题。如果您使用循环,请务必考虑它。但是,应该避免这种循环,因为单个位访问比同时处理整个存储 block 要慢。出于同样的原因,可能建议使用 native block 大小而不是 unsigned char
。
如果您确实需要以其他顺序存储,请先反转您的字符串:
std::reverse(compressed.begin(), compressed.end());
关于c++ - boost::dynamic_bitset<> 无论如何都以相反的顺序填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53584502/
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我想从输入对象内部开始找到下一个表单元素。Find() 是查找子对象的绝佳函数。但是在父级中寻找相反的方法呢?
是否可以执行$(this)的相反操作? 因此,它不是获取 this 元素,而是获取与 .sb-popular-thumb a 匹配但不包括 $(this) 的所有内容? 请参阅下面的示例代码。我已用
这是一个关于术语的问题。 考虑到有一个方法使用词法this: var foo = { method: function () { console.log(this, ' is the co
我想问你是否存在一个与 WHERE IN 相反的命令,我想选择数组中具有不同参数的所有行。 1 && id <> 2 && id <> 3"; // how can i do the same q
是否有语法来获取不在给定切片内的列表元素?给定切片 [1:4] 很容易得到这些元素: >>> l = [1,2,3,4,5] >>> l[1:4] [2, 3, 4] 如果我想要列表的其余部分,我可以
这个问题在这里已经有了答案: How can I remove a specific item from an array? (138 个回答) 关闭8年前。 JavaScript push(); 方
在此先感谢您的帮助。这是一个很棒的社区,我在这里找到了许多编程答案。 我有一个包含多个列的表,其中5个包含日期或null。 我想编写一个本质上将5列合并为1列的sql查询,条件是如果5列中的1包含“N
我使用 hasClass() 在 if 语句中验证元素是否具有给定的类。 如果元素没有给定的类,如何检查 if 语句?预先感谢您的回复。 最佳答案 为什么不简单地: if (!el.hasClass(
我有一个 std::vector v我想防止进一步写入它。 C++ 编译器不接受这个 const std::vector& w = v; 但它接受这个 const std::vector& w = r
这个问题已经有答案了: How to reshape data from long to wide format (14 个回答) 已关闭 7 年前。 我有像这样的巨大数据框: SN = c(1:10
如何将可调用(匿名函数)转换为字符串进行评估? 我正在尝试在 phpunit 中编写使用 runkit 的单元测试覆盖方法。特别是,runkit_method_redefine() 需要一个字符串参数
我想实现一个堆栈(队列),许多用户可以以 FILO 方式将其推送(),并且许多用户可以从中弹出()。 是否有与 pop() 等效的方法来检索/删除列表的最后一项? 例如: var popRef = f
我想知道“无状态协议(protocol)”的反面是什么。例如,鉴于 HTTP 是无状态的,那么像 FTP 这样的协议(protocol)是相反的/维护状态的协议(protocol),我的假设是否正确?
我对array_filter很熟悉,想往功能上想,但我想知道有没有办法保留被丢弃的值?例如,如果我有一个像这样的数组: 2; }); 结果将是:array( 3, 4 )。 有没有办法保留丢弃的值
我已将色轮的图像加载到 Canvas 上,并且在数组中有一个色相值列表。我遍历 Canvas 上的每个像素,并删除匹配相同色相值的像素。 该代码是: var element = document.ge
这个问题在这里已经有了答案: Repeat each row of data.frame the number of times specified in a column (10 个答案) 关闭
如何将可调用(匿名函数)转换为字符串以进行评估? 我正在尝试在使用 runkit 的 phpunit 中编写单元测试覆盖方法。特别是,runkit_method_redefine() 需要一个字符串参
我对array_filter很熟悉,想往功能上想,但我想知道有没有办法保留被丢弃的值?例如,如果我有一个像这样的数组: 2; }); 结果将是:array( 3, 4 )。 有没有办法保留丢弃的值
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我是一名优秀的程序员,十分优秀!