- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
QT的容器类的说明
QT的容器类的说明(1)Sequentail ContainersQVectorT array-like data structure(在尾部插入数据时效率很高,而在中间和头部插入数据时开销很大)。QVector提供了[]运算符QVector可以用运算符代替append()函数。QVector中的基本类型及指针被初始化为0。QLinkedListTQLinkedList不提供[]运算符,所以必须通过迭代器来对其进行遍历。QListT array-list:综合了QVectorT和QLinkedListT最重要的优点:支持[]运算符在头部或尾部的插入/删除操作很迅速,而尺寸在1000以下时,在中间的插入/删除操作也很迅速。通常情况下,QList是最合适的通用型容器。QStringList: QListQString的子类,在Qt中的API中被广泛使用QStackT 和QQueueT是Qt提供的两个convenience subclasses,QStackT实际上是一个额外提供了push(),pop()top()接口的QVector,而 QQueueT实际是一个额外提供了enqueue()和dequeue()和head()的QList。容器中可以放置的类必须拥有default constructor、copy constructor 和 assignment operator(显式定义或由编译器生成)注意,派生自QObject的类不符合上述要求,因为其不具备copy constructor和assignment operator;解决方法是在容器中存储对象指针而不是对象本身。容器中所存放的元素本身也可以是容器,即可以嵌套——不过需要注意将连续的尖括号用空格分隔开,以免编译器误认为运算符。IteratorQt支持两种风格的迭代器——Java-style和STL-styleJava-style的迭代器更容易使用,而STL-style的迭代器可以同Qt和STL中的算法联合使用,更为强大。Java-style Iterator?每个sequential容器类,都有两个Java-style的迭代器类型:只读迭代器和读写迭代器。在使用Java-style的迭代器时,要清楚的第一件事情就是:迭代器并不直接指向容器中的元素,而是指向元素之前或之后的位置。迭代器被初始化时指向容器中第一个元素之前;若迭代器的右侧有元素存在,hasNext()函数返回true;next()函数返回位于迭代器右侧的元素,并将迭代器向右方移动一个元素的位置;hasPrevious()和previous()函数执行反方向的操作。remove()函数总是删除最近一次被跳过的那个元素。setValue()函数总是对最近一次被跳过的那个元素执行更新操作insert()函数在迭代器当前指向的位置处插入新元素,并将迭代器指向新元素及其后续元素之间的位置。STL-style Iterator每个sequential容器类,都有两个STL-style的迭代器类型:ContainerT::iterator和ContainerT::const_iterator。容器的begin()函数返回一个指向容器中头部元素的iterator,而end()返回指向容器中尾部元素之后位置的iterator;在容器为空时,begin()和end()的结果相同。通常通过调用isEmpty()来检查容器是否为空,而不是通过比较begin()和end()的结果。可以对STL-style的iterator使用+、-、*这三个运算符,类似于指针的用法。某些Qt函数的返回值是容器类;如果需要使用STL-style的迭代器来对这样的返回值进行遍历,必须保存返回值的一个副本,并在副本上完成遍历,否则会可能会导致所谓的dangling iterator。注意,若使用java-style的只读迭代器,在这种情况下会隐式的完成复制的工作,保证迭代器总是在副本上进行遍历操作。implicit sharing(copy on write)Qt中的implicit sharing机制的美妙之处在于它鼓励程序员在返回对象时采用传值这种简明的方式而不是引用或指针。STL与此相反,鼓励程序员使用non-const引用来传递vector以避免将函数返回值的复制开销。Qt中所有的容器都采用了implicit sharing机制;此外很多其他类QByteArray,QBrush,QFont,QImage,QString也采用了该机制——这保证这些类在以传值方式进行传递时有很高的效率,无论是作为参数还是函数返回值。在Qt提供的implicit sharing机制下,对vector或list执行只读操作时,采用at()而不是[]运算符是一个更好的选择。
文档评论(0)