找到下一个不同的事件
Find the Next Different Occurrence
在我的项目中,我经常需要检查QByteArray
的下一个字节是否不同。因此,在一个包含999个零和1个非零字节的数组中,我想找到第一个不为零的字节的索引。
通常,我会循环遍历每个字节,直到找到一个不为零的字节。但是,由于indexOf只查找给定值的下一个出现,是否存在与indexOf完全相反的类似函数?
性能时间是我这样做的原因。我做了很多这样的循环只是为了找到第一个无关字节。有没有办法在不循环遍历每个字节的情况下更快地完成同样的工作?
如果你有一个相同字节的统一数组,只有一些是不同的,你可以通过转换你的数组指针(qint64*)或(qint32*)来获得很大的性能提升,这取决于你的机器,并且通过数组的步骤快八到四倍。
由qint64 * foo = (qint64*)byteArray.data();
这样,要检查的1024个字节将分解为128个qint64比较或256个qint32比较,以找到要检查的字节集,以找到实际不同的字节。
的例子:
0000 0000 0000 0000 0100
第18位的不同字节
如果你使用qint32,你需要四个步骤(取决于你如何启动搜索)来发现qint32与另一个不同,因为它的值不是0。
这个或类似的方法可以帮助您加快搜索速度。
相关文章:
- 重新定位图像时如何前进到下一个内存块
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 在 C++/CLI 中将 .NET 事件从一个 DLL 引发到另一个 DLL
- 用于在 C++ 中使用 while 循环查找下一个素数的简单函数
- CIN 仅在输入非数字值时跳过下一个 CIN
- 查找最小的下一个更大的元素
- 转到基于范围的 for 循环中的下一个迭代器
- 如何检查流中文件的下一个单词是否为 alpha?
- 如何打印下一个字母直到 Z 并继续到 A?
- 在使用堆栈为下一个最大数字编写代码时面临 SIGSEGV(分段错误)
- 使用一个内存集数组和单个堆栈在 O(n) 中查找数组的下一个更大元素
- 有没有一种标准方法可以在C++中获取第 n 个"下一个"浮点值
- 下一个云桌面客户端构建过程
- C++自定义流操纵器,用于更改流上的下一个字符串
- 链表指针赋值为什么我们不能直接将尾巴分配给 temp 而不是尾巴>尾巴下一个
- 下一个排列定义
- 查找下一个具有真值C++的数组索引
- 如何比较文件中包含的下一个字符
- 检查IP是否在其他IP网络范围内,并查找下一个可用IP
- 找到下一个不同的事件