QT::QBitArray
QbitArray类提供位操作序列。
include<QBitArray>
公有函数:
QBitArray () QBitArray ( int size, bool value = false ) QBitArray ( const QBitArray & other ) bool at ( int i ) const void clear () void clearBit ( int i ) int count () const int count ( bool on ) const bool fill ( bool value, int size = -1 ) void fill ( bool value, int begin, int end ) bool isEmpty () const bool isNull () const void resize ( int size ) void setBit ( int i ) void setBit ( int i, bool value ) int size () const bool testBit ( int i ) const bool toggleBit ( int i ) void truncate ( int pos ) bool operator!= ( const QBitArray & other ) const QBitArray & operator&= ( const QBitArray & other ) QBitArray & operator= ( const QBitArray & other ) bool operator== ( const QBitArray & other ) const QBitRef operator[] ( int i ) bool operator[] ( int i ) const QBitRef operator[] ( uint i ) bool operator[] ( uint i ) const QBitArray & operator^= ( const QBitArray & other ) QBitArray & operator|= ( const QBitArray & other ) QBitArrayoperator~ () const
涉及到得非成员函数:
QBitArray operator& ( const QBitArray & a1, const QBitArray & a2 ) QDataStream & operator<< ( QDataStream & out, const QBitArray & ba ) QDataStream & operator>> ( QDataStream & in, QBitArray & ba ) QBitArray operator^ ( const QBitArray & a1, const QBitArray & a2 ) QBitArrayoperator| ( const QBitArray & a1, const QBitArray & a2 )
详细描述:
QBitArray类提供了一个位序列。QBitArray类提供了访问序列中单独位的方法,也可以对序列中的位执行 与 、或、
异或操作(AND, OR ,NOT,XOR),提供隐式的内存共享机制,从而减少内存使用率和不必要的数据复制。
下面的代码初始化一个QBitArray对象,包含200个数位(BITS),全部初始化为0,即FALSE:
QBitArray ba(200);//ba包含200个0
把QBitArray中的某个数位初始化为TRUE,或者传递第二个参数作为QBitArray的构造函数,如QBitArray ba(200,TRUE),或者在之后调用fill()函数。 附注:在QBitArray中TRUE对应1,FALSE对应0.
QBitArray用0作为起始下标,这点类似于C++,当我们访问一个指定下标所对应的数位(BITS)时可以调用OPERATOR[]()。
在一个NON-CONST的位序列中,OPERATOR[]()返回一个可以用于左值的引用,例如:
QBitArray ba; ba.resize(3); ba[0] = true; ba[1] = false; ba[2] = true;
出于性能考虑,当我们访问QBitArray中的指定位(BITS)时,testBit()和setBit()相对于OPERATOR[]()在性能上效率更高。例如:
QBitArray ba(3); ba.setBit(0, true); ba.setBit(1, false); ba.setBit(2, true);
QBitArray支持 &(AND) |(OR) ^(XOR) ~(NOT)操作,类似于&=,|=,^=.这些操作对应于C++按位访问的名称是一个意思。例如:
QBitArray x(5); x.setBit(3, true); // x: [ 0, 0, 0, 1, 0 ] QBitArray y(5); y.setBit(4, true); // y: [ 0, 0, 0, 0, 1 ] x |= y; // x: [ 0, 0, 0, 1, 1 ]
附注:出于历史原因,QBitArray是区分NULL和EMPTY的,NULL对应于默认构造函数中的一个位,EMPTY在SIZE()返回0时被设置,一个NULL位总是EMPTY,但相反就不一定。例如:
QBitArray().isNull(); // returns true QBitArray().isEmpty(); // returns true QBitArray(0).isNull(); // returns false QBitArray(0).isEmpty(); // returns true QBitArray(3).isNull(); // returns false QBitArray(3).isEmpty(); // returns false
在所有的函数中只有isNull()对NULL和EMPTY做相同的处理,例如:QBitArray()和QBitArray(0)的执行效果是一样的,通常情况下,建议使用isEmpty(),而避免使用isNull().
成员函数描述:
QBitArray::QBitArray ()
//初始化一个为空的位处理序列QBitArray::QBitArray ( int size, bool value = false )
//初始化一个大小为size,默认情况下每一位(BITS)被初始化为FALSE即0QBitArray::QBitArray ( const QBitArray & other )
//复制构造函数。通常该函数会消耗一个常数时间值,因为为序列是建立的内存共享机制上的,所以会以很快的速度
//返回一个为位序列,如果共享实例被改变,该做操对应线性执行时间,主要消耗在读写上。bool QBitArray::at ( int i ) const
//返回指定下标i处所对应的布尔值(要么是0(FALSE),或者是1(TRUE)),给定的下标值必须有效,(0<=i<sisize() ).void QBitArray::clear ()
//清空序列的内容,此时该序列位EMPTY,但不为NULL。void QBitArray::clearBit ( int i )
//把指定下标i对应的值设置为0,给出的下标必须有效,不可产生溢出。int QBitArray::count () const
//返回序列大小,等同于size().int QBitArray::count ( bool on ) const
//如果参数on为true则返回序列中1的个数,如果参数on为false,则返回序列中0的个数。
//例如:count(true)+count(false)==count()==size()bool QBitArray::fill ( bool value, int size = -1 )
//把序列中俄每一个位设置成参数value所对应的值,成功则返回true,失败则返回false。
//注意:如果给出了第二个参数size的值,且不等于默认值-1时,该序列的大小将被重置位size所对应的值,例如:QBitArray ba(8); ba.fill(true); // ba: [ 1, 1, 1, 1, 1, 1, 1, 1 ] ba.fill(false, 2); // ba: [ 0, 0 ]void QBitArray::fill ( bool value, int begin, int end )
//这是一个重载的函数。把该序列中begin<=size<end这段范围的值设置成参数value所对应的值,参数begin和end
//必须是一个有效的范围,否则会产生越界或者溢出。bool QBitArray::isEmpty () const
//若果该序列的大小为0则返回true,否则返回falsebool QBitArray::isNull () const
//如果该序列为NULL则返回true,否则返回false,例如:QBitArray().isNull(); // returns true QBitArray(0).isNull(); // returns false QBitArray(3).isNull(); // returns false
//附注:出于历史原因,QT严格区分NULL和EMPTY,在大多数应用中,判断一个序列中是否包含有数据时,可以使用isEmpty()void QBitArray::resize ( int size )
//把序列的大小重置为参数size所指定的大小,如果参数size所指定的大小比序列的当前size()要大,则在序列end()后追加额外的空间,
//并把追加的空间的默认值设置为0.如果参数size所指定的值比序列的size()要小,则以逆序的方式从end()开始移除对应的位。void QBitArray::setBit ( int i )
//把参数i所指定的序列下标所对应的位值设置为1,参数i必须是一个有效的下标,否则会产生越界或溢出。void QBitArray::setBit ( int i, bool value )
//这是一个重载的函数,把参数i所指定的下标所对应的序列位值设置成参数value所指定的值。int QBitArray::size () const
//返回序列中位的个数的大小。bool QBitArray::testBit ( int i ) const
//如果参数下标值i所对应的序列值为1则返回true,否则返回false.参数i必须是一个有效的下标值,否则会产生越界或者溢出。bool QBitArray::toggleBit ( int i )
//反转下标i所对应的序列值,如果参数i所给定的下标,对应的序列值为0则反转未1,如果对应的序列值为1俄反转未0.参数i必须是一个有效的下标值,否则会产生越界或者溢出。void QBitArray::truncate ( int pos )
//截断下标pos到end()这段序列值,如果pos超出end()所限定的范围,则该操作无效。bool QBitArray::operator!= ( const QBitArray & other ) const
//如果this序列等于other序列,则返回true,否则返回false.QBitArray & QBitArray::operator&= ( const QBitArray & other )//在this序列和other序列的all bit上执行 &= 操作,把产生的结果值赋值诶this序列,并返回this序列的引用,//返回的序列会采用两个序列中长度最长的那个,较短序列的空余位添0,然后进行&操作.例如:QBitArray a(3); QBitArray b(2); a[0] = 1; a[1] = 0; a[2] = 1; // a: [ 1, 0, 1 ] b[0] = 1; b[1] = 0; // b: [ 1, 1 ] a &= b; // a: [ 1, 0, 0 ]
QBitArray & QBitArray::operator= ( const QBitArray & other )
//把other序列赋值给this序列,并返回该序列的引用。bool QBitArray::operator== ( const QBitArray & other ) const
//如果other序列等于this序列返回true,否则返回falseQBitRef QBitArray::operator[] ( int i )
//返回下标i所对应的序列值,该返回值可用于左值进行赋值运算,参数i必须是有效的下标值,否则会产生越界或者溢出。例如:QBitArray a(3); a[0] = false; a[1] = true; a[2] = a[0] ^ a[1];
相对而言testBit(), setBit(), and clearBit() 在执行效率上稍快一些。bool QBitArray::operator[] ( int i ) const
//这是一个重载函数,如果下标i所对应的序列值位1则返回true,如果下标i所对应的序列值位0则返回falseQBitRef QBitArray::operator[] ( uint i )
//重载函数,不同的是参数i是unsigned int 的类型重定义。并返回可用于左值赋值的引用bool QBitArray::operator[] ( uint i ) const
//重载函数,不同的是参数是unsigned int QBitArray & QBitArray::operator^= ( const QBitArray & other )
//在other和this序列间执行XOR异或操作,并把操作结果赋值给this序列,返回一个可用于左值赋值的引用值,
//结果集取两个序列中长度最长的那个,较短序列的空余部分用0填充,然后进行^操作。例如:QBitArray a(3); QBitArray b(2); a[0] = 1; a[1] = 0; a[2] = 1; // a: [ 1, 0, 1 ] b[0] = 1; b[1] = 0; // b: [ 1, 1 ] a ^= b; // a: [ 0, 1, 1 ] QBitArray & QBitArray::operator|= ( const QBitArray & other )
//在other和this序列间执行OR(或)操作,并把操作集赋值给this序列,返回一个引用。
//结果取两个序列中长度最长的那个,较短序列的空余部分用0填充,然后进行|操作。例如:QBitArray a(3); QBitArray b(2); a[0] = 1; a[1] = 0; a[2] = 1; // a: [ 1, 0, 1 ] b[0] = 1; b[1] = 0; // b: [ 1, 1 ] a |= b; // a: [ 1, 1, 1 ]QBitArray QBitArray::operator~ () const
//反转序列中的每一个位,如果当前位是0则反转为1,如果当前位是1则反转为0,例如:QBitArray a(3); QBitArray b; a[0] = 1; a[1] = 0; a[2] = 1; // a: [ 1, 0, 1 ] b = ~a; // b: [ 0, 1, 0 ]
涉及到得非成员函数:
QBitArray operator& ( const QBitArray & a1, const QBitArray & a2 )
//返回序列a1和序列a2在进行&操作后的序列集,如果a1.size()<a2.size(),或者a2.size()<a1.size(),则把较短序列扩充至较长序列所对应的长度,并在尾部填充0,然后和较长序列进行&操作,例如:QBitArray a(3); QBitArray b(2); QBitArray c; a[0] = 1; a[1] = 0; a[2] = 1; // a: [ 1, 0, 1 ] b[0] = 1; b[1] = 0; // b: [ 1, 1 ] c = a & b; // c: [ 1, 0, 0 ]QBitArray operator^ ( const QBitArray & a1, const QBitArray & a2 )
//返回序列a1和a2的XOR结果集,把较短序列扩充至较长序列所对应的长度,并在尾部用0填充,然后和较长序列进行XOR操作。
例如:QBitArray a(3); QBitArray b(2); QBitArray c; a[0] = 1; a[1] = 0; a[2] = 1; // a: [ 1, 0, 1 ] b[0] = 1; b[1] = 0; // b: [ 1, 1 ] c = a ^ b; // c: [ 0, 1, 1 ]QBitArray operator| ( const QBitArray & a1, const QBitArray & a2 )
//对序列a1和a2进行OR操作,并返回结果集,把较短序列扩充至较长序列所对应的长度,并在尾部用0填充,然后进行OR操作。例如:QBitArray a(3); QBitArray b(2); QBitArray c; a[0] = 1; a[1] = 0; a[2] = 1; // a: [ 1, 0, 1 ] b[0] = 1; b[1] = 0; // b: [ 1, 1 ] c = a | b; // c: [ 1, 1, 1 ]QDataStream & operator<< ( QDataStream & out, const QBitArray & ba )
//把序列ba的每一位送至输出缓冲区,进行输出。
QDataStream & operator>> ( QDataStream & in, QBitArray & ba )
//读取输入流中的数据送入序列ba中。
QT::QBitArray相关推荐
- QT:触摸屏支持手指触摸,增加touch事件touchevent,记录前后touch坐标并处理
QT:触摸屏支持手指触摸,增加touch事件touchevent,记录前后touch坐标并处理 1.手指触摸事件当做鼠标事件去响应的可行性 2.触摸事件touchEvent的添加 3.重写touch事 ...
- QT:常用函数详解--常用操作记录(个人笔记)
QT:常用函数详解(个人笔记) PS:一下内容个人笔记,要求自己看懂,随笔,阅读体验会很差很差! Qt setContentsMargins()函数 函数原型:void QLayout::setCon ...
- QT的QBitArray 类的使用
详细说明 QBitArray类提供了一个位数组. QBitArray是一个数组,它可以访问各个位并提供可在整个位数组上工作的运算符(AND,OR,XOR和NOT). 它使用隐式共享(写时复制)来减少内 ...
- qt 设置串口起始位_【IT专家】Qt:如何设置主窗口的初始位置?
本文由我司收集整编,推荐下载,如有疑问,请与我司联系 Qt :如何设置主窗口的初始位置? Qt :如何设置主窗口的初始位置? [ 英 ]Qt: how to set main window's ini ...
- linux qt 音频文件怎么打开,Qt:获取Linux中可用音频设备的列表
我想要获取我的Linux系统上可用的所有音频设备的列表.然后我会将这个列表显示在一个组合框中,用户将从中选择用于录制/播放的设备.根据用户的选择,我将构建QAudioInput和QAudioOutpu ...
- qt添加资源文件后编译失败,提示Qt:Error:No rule to make target ’ … /…/??.png’,needed by ‘debug/qrc_qrc.cpp’ stop
提要 项目本来编译没有问题,资源文件忘记添加了,于是添加资源文件后,编译没有通过,提示错误:Qt:Error:No rule to make target ' - /-/??.png',needed ...
- Qt:Windows编程—代码注入
前言 这里所说的代码注入和上篇的DLL注入有类似之处.DLL文件的注入与卸载在上篇中都完成了,整个注入与卸载的过程其实就是让远程线程执行一次LoadLibrary函数或者FreeLibrary函数 ...
- Qt:Qt实现飞秋拦截助手—ARP攻击
Qt实现飞秋拦截助手-ARP攻击 前言 继续我们的飞秋拦截助手开发,上篇是Qt:Qt实现飞秋拦截助手-Mac地址扫描器 ,本篇将介绍 如何进行ARP攻击,也叫ARP欺骗. 我们知道本机有个ARP缓存表 ...
- Qt:Qt实现飞秋拦截助手—Mac地址扫描器
Qt实现飞秋拦截助手-Mac地址扫描器 前言 准备好了就开干,利用业余时间,开始着手写 飞秋拦截助手,按照Qt:Qt实现飞秋拦截助手-介绍 中的4步骤来走.4步骤中,Mac地址扫描器是第一步,因为网络 ...
最新文章
- 读懂深度迁移学习,看这文就够了 | 赠书
- 使用VS2008开发及部署Excel AddIn 心得
- 百分点首席经济学家张忠解读《美国白宫大数据白皮书》
- sklearn数据集变换
- delete表1条件是另一个表中的数据,多表连接删除
- monaco editor + vue的配置
- 六大方法来对付网站出现的负面信息
- pythonmooc期末考试编程题_大学moocPython编程基础期末考试搜题公众号答案
- ReportView动态加载带参数的RDCL文件
- 微信小程序的民宿客房预订uniapp小程序
- 使用命令查看linux编码,如何利用命令查看linux 系统汉字编码
- SDN:简述对SDN的认识
- Window 配置RabbitMQ
- Spark Basics
- 了解Apache实木复合地板
- qt中,如何用QLabel显示一个变量!
- weinre远程调试mobile页面
- Docker容器基础
- dashucoding记录2019.6.8
- 信息安全技术之08之设备与环境安全测试卷