QPtrVector类

Qt 3.0.5

主页 | 所有的类 | 主要的类 | 注释的类 | 分组的类 | 函数

QPtrVector类参考

QPtrVector类是提供矢量(数组)的模板集合类。 详情请见……

#include <qptrvector.h>

继承了QPtrCollection

所有成员函数的列表。

公有成员

重要继承成员

保护成员

  • virtual int compareItems ( QPtrCollection::Item d1, QPtrCollection::Item d2 )
  • virtual QDataStream & read ( QDataStream & s, QPtrCollection::Item & item )
  • virtual QDataStream & write ( QDataStream & s, QPtrCollection::Item item ) const

详细描述

QPtrVector类是提供矢量(数组)的模板集合类。

QValueVector是可以替代这个类的的一个可兼容STL的的选择。

QPtrVector被设计为一个模板类。定义一个模板实例QPtrVector<X>就创建了一个操作X(X*)指针的矢量。

矢量和数组是相同的。QPtrVector和QMemArray的主要不同就是QPtrVector存储元素的指针,而QMemArray存储元素自身(比如,QMemArray是基于类的并且QPtrVector是基于指针的)。

可以使用insert()或fill()把项添加到矢量中。可以使用remove()来移除项。你可以使用at()得到一个指定索引位置的项的指针。

除非是相反的状态,如果自动删除生效,所有从矢量中移除项的函数也都会将它们指向的元素删除。默认情况下,自动删除是失效的,请参考setAutoDelete()。这个行为可以通过在子类中重新实现虚函数deleteItem()来改变。

比较项的函数(比如find()和sort())也都使用虚函数compareItems()。这个函数的默认实现只是比较指针值。在子类中中心实现compareItems()来获得基于项的内容的搜索和排序。你可以使用findRef()在矢量中执行一个对指针的线性搜索,或者使用bsearch()在一个排好序的矢量中执行一个二进制搜索。你可以使用contains()或containsRef()来统计一个项在矢量中出现的次数。

也可以参考QMemArray非GUI类


成员函数文档

QPtrVector::QPtrVector ()

构造一个零矢量。

也可以参考isNull()。

QPtrVector::QPtrVector ( uint size )

构造一个空间为size项的矢量。如果size==0,构造一个零矢量。

矢量中所有size个位置都被初始化为0。

也可以参考size()、resize()和isNull()。

QPtrVector::QPtrVector ( const QPtrVector<type> & v )

构造一个v的复制。只有指针被复制(比如,浅复制)。

QPtrVector::~QPtrVector ()

从矢量中移除所有的项,并且销毁矢量自己。

也可以参考clear()。

type * QPtrVector::at ( uint i ) const

返回在i位置的项,或者如果在那个位置没有项,返回0。i必须小于size()。

bool QPtrCollection::autoDelete () const

返回自动删除选项的设置。默认为假。

也可以参考setAutoDelete()。

int QPtrVector::bsearch ( const type * d ) const

在一个排好序的数组中,使用二进制搜索找到d第一次出现的位置。对于一个排好序的数组,这个比做线性搜索的find()要快很多。

返回d的位置,或者如果d没有被找到返回-1。d必须不能为0。

比较项使用虚函数compareItems()。

也可以参考sort()和find()。

void QPtrVector::clear () [虚]

从矢量中删除所有项,并且销毁矢量自己。

矢量变为一个零矢量。

也可以参考isNull()。

QPtrCollection中重新实现的。

int QPtrVector::compareItems ( QPtrCollection::Item d1, QPtrCollection::Item d2 ) [虚 保护]

这个虚函数比较两个列表项:

返回:

  • 如果d1==d2,返回0
  • 如果d1!=d2,返回非0

这个函数返回int而不是bool,这样重新实现就可以返回3个值并且用来进行排序:

  • 如果d1==d2,返回0
  • 如果d1>d2,返回>0(正整数)
  • 如果d1<d2,返回<0(负整数)

sort()和bsearch()函数需要compareItems()像这里所描述的那样被实现。

这个函数不应该修改矢量因为一些常量函数会调用compareItems()。

uint QPtrVector::contains ( const type * d ) const

返回矢量中项d出现的次数。

比较项使用虚函数compareItems()。

也可以参考containsRef()。

uint QPtrVector::containsRef ( const type * d ) const

返回矢量中项指针d出现的次数。

这个函数使用compareItems()来比较项。

也可以参考findRef()。

uint QPtrVector::count () const [虚]

返回矢量中项的数量。如果count()==0,这个矢量为空。

也可以参考isEmpty()和size()。

QPtrCollection中重新实现。

type ** QPtrVector::data () const

返回指向实际矢量数据(type*的数组)的指针。

如果data()==0(零指针),矢量为零矢量。

也可以参考isNull()。

bool QPtrVector::fill ( const type * d, int size = -1 )

在矢量的所有位置插入项d。任何存在的项都被移除。如果d为0,这个矢量变为空。

如果size>=0,矢量首先被重新定义大小为size。默认情况下,size为-1。

如果成功,返回真,或者如果内存不能被分配(只有在重定义大小被需要的时候),返回假。

也可以参考resize()、insert()和isEmpty()。

int QPtrVector::find ( const type * d, uint i = 0 ) const

在矢量中使用线性搜索找到项d第一次出现的位置。这个搜索从i位置开始,i必须小于size()。i默认为0,比如,搜索从矢量的开始处开始。

返回d的位置,或者如果d没有被找到,返回-1。

比较项使用虚函数compareItems()。

使用更快的bsearch()来搜索一个排好序的矢量。

也可以参考findRef()和bsearch()。

int QPtrVector::findRef ( const type * d, uint i = 0 ) const

在矢量中使用线性搜索找到项指针d第一次出现的位置。这个搜索从i位置开始,i必须小于size()。i默认为0,比如,搜索从矢量的开始处开始。

返回d的位置,或者如果d没有被找到,返回-1。

这个函数使用compareItems()来比较项。

使用更快的bsearch()来搜索一个排好序的矢量。

也可以参考find()和bsearch()。

bool QPtrVector::insert ( uint i, const type * d )

设置矢量中的位置i来包含项di必须小于size()。在i位置的任何以前的元素被移除了。

也可以参考at()。

bool QPtrVector::isEmpty () const

如果矢量为空,返回真,否则返回假。

也可以参考count()。

bool QPtrVector::isNull () const

如果矢量为零,返回真,否则返回假。

一个零矢量中size()== 0并且data()==0。

也可以参考size()。

QPtrVector<type> & QPtrVector::operator= ( const QPtrVector<type> & v )

v赋值给这个矢量并且返回这个矢量的引用。

这个矢量首先被清空并且然后v所有的项都被复制到矢量中。只有指针被复制(比如,浅复制)。

也可以参考clear()。

bool QPtrVector::operator== ( const QPtrVector<type> & v ) const

如果这个矢量和v相等,返回真,否则返回假。

type * QPtrVector::operator[] ( int i ) const

返回在位置i的项,或者如果在那个位置没有项,返回0。i必须小于size()。

等于at( i )。

也可以参考at()。

QDataStream & QPtrVector::read ( QDataStream & s, QPtrCollection::Item & item ) [虚 保护]

从流s中读入一个矢量项item并且返回流的引用。

默认实现是设置item为0。

也可以参考write()。

bool QPtrVector::remove ( uint i )

如果有的话,移除矢量中位置i的项。i必须小于size()。

只要i不超出范围,就返回真。

也可以参考take()和at()。

bool QPtrVector::resize ( uint size )

重定义(扩大或缩小)矢量的大小为size。如果size==0,数组变为零数组。

矢量中在size位置的或者超出的任何项被一出了。新的位置被初始化为0。

如果成功,返回真,或者如果内存不能被分配,返回假。

也可以参考size()和isNull()。

void QPtrCollection::setAutoDelete ( bool enable )

如果enable为真,设置集合自动删除它的内容并且如果enable为假,就从不删除它们。

如果自动删除被打开,当集合被删除时,集合中的所有项都会被删除。如果集合拥有项的唯一指针,这个将是非常方便的。

为了安全,默认设置为假。如果你把它打开,在复制集合时请注意。你也许会发现你自己的两个集合删除相同的项。

注意在子类中自动删除设置也许会影响其它函数。例如,一个有remove()函数的子类将会从它的数据结构中移除这个项,并且如果自动删除生效,也将会删除这个项。

也可以参考autoDelete()。

矢量:grapher/grapher.cppscribble/scribble.cpptable/bigtable/main.cpp

uint QPtrVector::size () const

返回矢量的大小,比如矢量位置的数量。这也是矢量中可以保存元素的最大数量。

如果size()==0,这个矢量为空矢量。

也可以参考isNull()、resize()和count()。

void QPtrVector::sort ()

按升序排列项。任何空的位置将被放在最后面。

比较项使用虚函数compareItems()。

也可以参考bsearch()。

type * QPtrVector::take ( uint i )

返回矢量中位置i的项,并且从矢量中移除项。i必须小于size()。如果在位置i没有项,返回0。

remove()形成对照,这个函数调用deleteItem()来比较项。

也可以参考remove()和at()。

void QPtrVector::toList ( QGList * list ) const

复制这个矢量的所有项到列表list中。list首先被清空并且然后被添加到list中。

也可以参考QPtrListQPtrStackQPtrQueue

QDataStream & QPtrVector::write ( QDataStream & s, QPtrCollection::Item item ) const [虚 保护]

写一个矢量项item到流s中并且返回流的引用。

默认实现是不做任何事。

也可以参考read()。


这个文件是Qt工具包一部分。 版权所有 © 1995-2002 Trolltech。保留所有权利。


Copyright © 2002 Trolltech Trademarks 译者:Cavendish
Qt 3.0.5版