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  )
QBitArray operator~  () 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  )
QBitArray operator|  ( const QBitArray &  a1 , const QBitArray &  a2  )

详细描述:

QBitArray类提供了一个位序列。

QBitArray类提供了访问序列中单独位的方法,也可以对序列中的位执行  与 、或、 非、异或操作(AND, OR ,NOT,XOR),提供隐式的内存共享机制,从而减少内存使用率和不必要的数据复制。

下面的代码初始化一个 QBitArray对象,包含200个数位(BITS),全部初始化为0,即FALSE:


<span style="font-family:SimHei;font-size:18px;">
</span>
<span style="font-family:SimHei;font-size:18px;"> 把QBitArray中的某个数位初始化为TRUE,或者传递第二个参数作为<strong>QBitArray的构造函数,如QBitArray ba(200,TRUE),或者在之后调用fill()函数。附注:在QBitArray中TRUE对应1,FALSE对应0.</strong></span>

   QBitArray用0作为起始下标,这点类似于C++,当我们访问一个指定下标所对应的数位(BITS)时可以调用OPERATOR[]()。  在一个NON-CONST的位序列中,OPERATOR[]()返回一个可以用于左值的引用,例如:

    


出于性能考虑,当我们访问QBitArray中的指定位(BITS)时,testBit()和setBit()相对于OPERATOR[]()在性能上效率更高。例如:


QBitArray支持 &(AND) |(OR)  ^(XOR)  ~(NOT)操作,类似于&=,|=,^=.这些操作对应于C++按位访问的名称是一个意思。例如:


出于历史原因,QBitArray是区分NULL和EMPTY的,NULL对应于默认构造函数中的一个位,EMPTY在SIZE()返回0时被设置,一个NULL位总是EMPTY,但相反就不一定。例如:


在所有的函数中只有isNull()对NULL和EMPTY做相同的处理,例如:QBitArray()和QBitArray(0)的执行效果是一样的,通常情况下,建议使用isEmpty(),而避免使用isNull().

Member Function Documentation:

QBitArray:: QBitArray  () //初始化一个为空的位处理序列

QBitArray:: QBitArray  (  int   size ,  bool   value  = false ) //初始化一个大小为size,默认情况下每一位(BITS)被初始化为FALSE即0

QBitArray:: 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所对应的值,例如:


void  QBitArray:: fill  (  bool   value ,  int   begin ,  int   end  )

//这是一个重载的函数。把该序列中begin<=size<end这段范围的值设置成参数value所对应的值,参数begin和end

//必须是一个有效的范围,否则会产生越界或者溢出。

bool  QBitArray:: isEmpty  () const

//若果该序列的大小为0则返回true,否则返回false

bool  QBitArray:: isNull  () const

//如果该序列为NULL则返回true,否则返回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  & QBitArray:: operator=  ( const  QBitArray  &  other  )

//把other序列赋值给this序列,并返回该序列的引用。

bool  QBitArray:: operator==  ( const  QBitArray  &  other  ) const

//如果other序列等于this序列返回true,否则返回false

QBitRef  QBitArray:: operator[]  (  int   i  )

//返回下标i所对应的序列值,该返回值可用于左值进行赋值运算,参数i必须是有效的下标值,否则会产生越界或者溢出。例如:


相对而言 testBit (),  setBit (), and  clearBit () 在执行效率上稍快一些。

bool  QBitArray:: operator[]  (  int   i  ) const

//这是一个重载函数,如果下标i所对应的序列值位1则返回true,如果下标i所对应的序列值位0则返回false

QBitRef  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  & QBitArray:: operator|=  ( const  QBitArray  &  other  )

//在other和this序列间执行OR(或)操作,并把操作集赋值给this序列,返回一个引用。结果取两个序列中长度最长的那个,较短序列的空余部分用0填充,然后进行|操作。例如:


QBitArray  QBitArray:: operator~  () const

//反转序列中的每一个位,如果当前位是0则反转为1,如果当前位是1则反转为0,例如:


涉及到得非成员函数:

QBitArray   operator&  ( const  QBitArray  &  a1 , const  QBitArray &  a2  )

//返回序列a1和序列a2在进行&操作后的序列集,如果a1.size()<a2.size(),或者a2.size()<a1.size(),则把较短序列扩充至较长序列所对应的长度,并在尾部填充0,然后和较长序列进行&操作,例如:


QBitArray   operator^  ( const  QBitArray  &  a1 , const  QBitArray  & a2  )

//返回序列a1和a2的XOR结果集,把较短序列扩充至较长序列所对应的长度,并在尾部用0填充,然后和较长序列进行XOR操作。

例如:

QBitArray   operator|  ( const  QBitArray  &  a1 , const  QBitArray  & a2  )

//对序列a1和a2进行OR操作,并返回结果集,把较短序列扩充至较长序列所对应的长度,并在尾部用0填充,然后进行OR操作。例如:


 

QDataStream  &  operator<<  (  QDataStream  &  out , const QBitArray  &  ba  )

//把序列ba的每一位送至输出缓冲区,进行输出。

QDataStream  &  operator>>  (  QDataStream  &  in ,  QBitArray  & ba  )

//读取输入流中的数据送入序列ba中。

QT:QBitArray的更多相关文章

  1. 对QT中QBitArray类进行简单剖析

    我们知道Qt中的QBitArray类支持在位(bit)的层次上进行数据操作.本文剖析该类在二进制文件读写时的一些要点.另外,在Qt中,QDataStream类对于二进制文件的读写提供了诸多便利,需要注 ...

  2. QT QString 很全的使用 (转)

    QString, QByteArray, 和 QVariant这三个类和容器有许多相同之处,并且在一些情况下可以被当作特殊的容器. 同样,像容器,这些类使用隐式共享来优化内存和速度. 我们将从QStr ...

  3. QT中的字符串处理函数

    Fn 1 : arg 这个函数的具体声明不写了,它有20个重载,典型的示例代码如下: 1: #include <QtCore/QCoreApplication> 2: #include & ...

  4. 将vim作为QT开发的IDE

    转载请注明链接与作者huihui1988 用了一段时间的vim,喜欢上了这种简洁高效的编辑器.恰逢正在学习QT中,于是将vim变成了开发QT的工具.以下是具体配置. 一.语法高亮支持: 1.打开VIM ...

  5. C/C++取出变量的每一位的值(第一次知道还有QBitArray)

    前写程序最多也只是字节级别操作,用char和memcpy进行一系列内存操作.此次一个sdk,其状态值直接是每位一个标示,所以需要取出每位进行操作.当然CPP也有丰富的位运算操作,但是虽然也学过,知道意 ...

  6. Qt容器类(总结)(新发现的QQueue和QStack,注意全都是泛型)

    Introduction Qt库提供了一组基于模板的一般化的容器类.这些容器可以存储指定的类型的元素.例如,如果你需要一个可变大小的Qstring数组,可以用QVector<QString> ...

  7. Qt的QVariant类

    QStandardItemModel类中的函数 bool setData(const QModelIndex &index, const QVariant &value, int ro ...

  8. qt 5.2.1类和模块的关系图

    QT│  ├─ActiveQt│  │  ActiveQt│  │  ActiveQtDepends│  │  ActiveQtVersion│  │  QAxAggregated│  │  QAxB ...

  9. Qt——容器类(译)

    注:本文是我对Qt官方文档的翻译,错误之处还请指正. 原文链接:Container Classes 介绍 Qt库提供了一套通用的基于模板的容器类,可以用这些类存储指定类型的项.比如,你需要一个大小可变 ...

随机推荐

  1. SPRING IN ACTION 第4版笔记-第八章Advanced Spring MVC-002-SpringFlow的组件(state\<transition>\<var>\<set>\<evaluate>)

    一. In Spring Web Flow, a flow is defined by three primary elements: states, transitions,and flow dat ...

  2. Linux进程创建和结束

    在Linux中,进程的创建由系统调用fork和vfork完成.它们生成一个子进程并且子进程是父进程的一个复制品. Fork系统调用对应的kernel函数是sys_fork,此函数简单的调用kernel ...

  3. deque用法 和与vector的区别

    deque是双向开口的连续性存储空间.虽说是连续性存储空间,但这种连续性只是表面上的,实际上它的内存是动态分配的,它在堆上分配了一块一块的动态储存区,每一块动态存储去本身是连续的,deque自身的机制 ...

  4. cat主要有三大功能

    cat主要有三大功能:1.一次显示整个文件.$ cat filename2.从键盘创建一个文件.$ cat > filename     只能创建新文件,不能编辑已有文件.3.将几个文件合并为一 ...

  5. 加载网络映射盘中的assembly失败的处理办法

    错误症状: 1.{"未能加载文件或程序集“file://*****”或它的某一个依赖项.不支持操作. (异常来自 HRESULT:0x80131515)":"file:/ ...

  6. Mysql表的七种引擎类型,InnoDB和MyISAM引擎对比区别总结

    InnoDB和MyISAM区别总结 我用MySQL的时候用的是Navicat for MySQL(Navicat for mysql v9.0.15注册码生成器)操作库.表操作的,默认的表就是Inno ...

  7. eclipse 代码中突然出现特殊字符

    在写代码的时候,不知道点到了 eclipse 的哪个属性,代码中就出现了一些特殊字符,也不能删除. 请问,在 eclipse 中该怎么设置,才能将这些字符去掉. 如下图所示: 解决方法: 选择Wind ...

  8. spring--AOP1--6

    AOP 之 6.1 AOP基础 6.1.1  AOP是什么 考虑这样一个问题:需要对系统中的某些业务做日志记录,比如支付系统中的支付业务需要记录支付相关日志,对于支付系统可能相当复杂,比如可能有自己的 ...

  9. 转载-smarty教程(基本语法)

    转自:http://hi.baidu.com/qxxgvpdtzhbckpr/item/681049160d7be60db98a1aec 1.smarty的配置      首先,使用smarty第一件 ...

  10. UI之UItableView重用机制的性能问题

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...