返回介绍

QPtrVector类

发布于 2019-10-04 15:02:07 字数 8631 浏览 1076 评论 0 收藏 0

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

#include <qptrvector.h>

继承了QPtrCollection。

所有成员函数的列表。

公有成员

  • QPtrVector ()
  • QPtrVector ( uintsize )
  • QPtrVector ( constQPtrVector<type>&v )
  • ~QPtrVector ()
  • QPtrVector<type> & operator= ( constQPtrVector<type>&v )
  • bool operator== ( constQPtrVector<type>&v ) const
  • type ** data () const
  • uint size () const
  • virtual uint count () const
  • bool isEmpty () const
  • bool isNull () const
  • bool resize ( uintsize )
  • bool insert ( uinti, consttype*d )
  • bool remove ( uinti )
  • type * take ( uinti )
  • virtual void clear ()
  • bool fill ( consttype*d, intsize = -1 )
  • void sort ()
  • int bsearch ( consttype*d ) const
  • int findRef ( consttype*d, uinti = 0 ) const
  • int find ( consttype*d, uinti = 0 ) const
  • uint containsRef ( consttype*d ) const
  • uint contains ( consttype*d ) const
  • type * operator[] ( inti ) const
  • type * at ( uinti ) const
  • void toList ( QGList*list ) const

重要继承成员

  • bool autoDelete () const
  • void setAutoDelete ( boolenable )

保护成员

  • virtual int compareItems ( QPtrCollection::Itemd1, QPtrCollection::Itemd2 )
  • virtual QDataStream & read ( QDataStream&s, QPtrCollection::Item&item )
  • virtual QDataStream & write ( QDataStream&s, QPtrCollection::Itemitem ) 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 ( uintsize )

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

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

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

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

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

QPtrVector::~QPtrVector ()

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

也可以参考clear()。

type * QPtrVector::at ( uinti ) const

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

bool QPtrCollection::autoDelete () const

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

也可以参考setAutoDelete()。

int QPtrVector::bsearch ( consttype*d ) const

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

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

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

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

void QPtrVector::clear () [虚]

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

矢量变为一个零矢量。

也可以参考isNull()。

从QPtrCollection中重新实现的。

int QPtrVector::compareItems ( QPtrCollection::Itemd1, QPtrCollection::Itemd2 ) [虚 保护]

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

返回:

  • 如果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 ( consttype*d ) const

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

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

也可以参考containsRef()。

uint QPtrVector::containsRef ( consttype*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 ( consttype*d, intsize = -1 )

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

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

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

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

int QPtrVector::find ( consttype*d, uinti = 0 ) const

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

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

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

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

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

int QPtrVector::findRef ( consttype*d, uinti = 0 ) const

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

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

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

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

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

bool QPtrVector::insert ( uinti, consttype*d )

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

也可以参考at()。

bool QPtrVector::isEmpty () const

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

也可以参考count()。

bool QPtrVector::isNull () const

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

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

也可以参考size()。

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

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

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

也可以参考clear()。

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

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

type * QPtrVector::operator[] ( inti ) const

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

等于at( i )。

也可以参考at()。

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

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

默认实现是设置item为0。

也可以参考write()。

bool QPtrVector::remove ( uinti )

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

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

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

bool QPtrVector::resize ( uintsize )

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

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

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

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

void QPtrCollection::setAutoDelete ( boolenable )

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

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

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

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

也可以参考autoDelete()。

矢量:grapher/grapher.cpp、scribble/scribble.cpp和table/bigtable/main.cpp。

uint QPtrVector::size () const

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

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

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

void QPtrVector::sort ()

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

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

也可以参考bsearch()。

type * QPtrVector::take ( uinti )

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

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

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

void QPtrVector::toList ( QGList*list ) const

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

也可以参考QPtrList、QPtrStack和QPtrQueue。

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

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

默认实现是不做任何事。

也可以参考read()。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文