网站大量收购独家精品文档,联系QQ:2885784924

Qt 容器类之遍历器和隐式数据共享.pdfVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Qt 容器类之遍历器和隐式数据共享

Qt 容器类之遍历器和隐式数据共享 Qt 容器类之遍历器和隐式数据共享 前⾯说过,Qt 容器类提供了两种遍历器:Java 风格的和 STL 风格的。前者⽐较容易 使⽤,后者则可以⽤ ⼀些通过算法中,功能⽐较强⼤。 对于每⼀个容器类,都有与之相对应的遍历器:只读遍历器和读写遍历器。只读遍历 器有QVectorIterator ,QLinkedListIterator和 QListIterator三种;读写遍历器同样也有三 种,只不过名字中具有⼀个 Mutable ,即 QMutableVectorIterator , QMutableLinkedListIterator和 QMutableListIterator 。这⾥我们只讨论 QList 的遍历器, 其余遍历器具有⼏乎相同的API 。 Java 风格的遍历器的位置如下图所⽰(出⾃ C++ GUI Pro rammin with Qt4 , 2nd Edition) : 可以看出,Java 风格的遍历器,遍历器不指向任何元素,⽽是指向第⼀个元素之前、 两个元素之间或者是最后⼀个元素之后的位置。使⽤ Java 风格的遍历器进⾏遍历的典 型代码是: QListdouble list; // ... QListIteratordouble i(list); while (i.hasNext()) { doSomething ith(i.next()); } 这个遍历器默认指向第⼀个元素,使⽤ hasNext()和 next()函数从前向后遍历。你也可 以使⽤ toBack()函数让遍历器指向最后⼀个元素的后⾯的位置,然后使⽤ hasPrevious()和 previous()函数进⾏遍历。 这是只读遍历器,⽽读写遍历器则可以 遍历的时候进⾏增删改的操作,例如: QMutableListIteratordouble i(list); while (i.hasNext()) { if (i.next() 0.0) i.remove(); } 当然,读写遍历器也是可以从后向前遍历的,具体 API 和前⾯的⼏乎相同,这⾥就不 再赘述。 对应于 Java 风格的遍历器,每⼀个顺序容器类 C都有两个 STL 风格的遍历器: C::iterator和 C::const_iterator 。正如名字所暗⽰的那样,const_iterator 不允许我们对遍 历的数据进⾏修改。be in()函数返回指向第⼀个元素的 STL 风格的遍历器,例如 list[0] ,⽽ end()函数则会返回指向最后⼀个之后的元素的 STL 风格的遍历器,例如如 果⼀个 list 长度为5 ,则这个遍历器指向 list[5] 。下图所⽰ STL 风格遍历器的合法位 置: 如果容器是空的,be in()和 end()是相同的。这也是⽤于检测容器是否为空的⽅法之 ⼀,不过调⽤isEmpty()函数会更加⽅便。 STL 风格遍历器的语法类似于使⽤指针对数组的操作。我们可以使⽤++和--运算符使 遍历器移动到下⼀位置,遍历器的返回值是指向这个元素的指针。例如 QVector 的 iterator 返回值是 T 类型,⽽ const_iterator 返回值是 const T 类型。 ⼀个典型的使⽤ STL 风格遍历器的代码是: QListdouble::iterator i = list.begin(); while (i != list.end()) { *i = qAbs(*i); ++i; } 对于某些返回容器的函数⽽⾔,如果需要使⽤ STL 风格的遍历器,我们需要建⽴⼀个 返回值的拷贝,然后再使⽤遍历器进⾏遍历。如下⾯的代码所⽰: QListint list = splitter-sizes(); QListint::const_iterator i = list.begin(); while (i != list.end()) { doSomething(*i); ++i; } ⽽如果你直接使⽤返回值,就像下⾯的代码: // RONG QListint::const_iterator i = splitter-sizes().begin(); while (i != splitter-sizes

文档评论(0)

wnqwwy20 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:7014141164000003

1亿VIP精品文档

相关文档