遍历qvector_Qt容器类——1. QList类、QLinkedList类和QVector类

在开发一个较高性能需求的应用程序时,程序员会比较关注这些容器类的运行效率,表2.1列出了QList、QLinkedList和QVector容器的时间复杂度比较。

39b81ca1020de115e7e5e096c971b7e9.png

1.QList类

QList是迄今为止最常用的容器类,它存储给定数据类型T的一列数值。

QList不仅提供了可以在列表进行追加的QList::append()和Qlist::prepend()函数,还提供了在列表中间完成插入操作的函数QList::insert()。

QList维护了一个指针数组,该数组存储的指针指向QList存储的列表项的内容。

对于不同的数据类型,QList采取不同的存储策略,存储策略有以下几种。

(1)如果T是一个指针类型或指针大小的基本类型(即该基本类型占有的字节数和指针类型占有的字节数相同),QList会将数值直接存储在它的数组中。

(2)如果QList存储对象的指针,则该指针指向实际存储的对象。

下面举一个例子:

#include

int main(int argc,char *argv[])

{

QList list;

{

QString str("This is a test string");

list<

}

qDebug()<

return 0;

}

2.QLinkedList类

QLinkedList是一个链式列表,它以非连续的内存块保存数据。

QLinkedList不能使用下标,只能使用迭代器访问它的数据项。

3.QVector类

QVector在相邻的内存中存储给定数据类型T的一组数值。

QVector既可以使用下标访问数据项,也可以使用迭代器访问数据项。

4.Java风格迭代器遍历容器

Java风格的迭代器是Qt 4新加入的一个功能。 对于每一个容器类,Qt都提供了两种类型的Java风格迭代器数据类型,即只读访问和读写访问,其分类见表2.2。

2c4f2457902ac948d70bc6b80377c96d.png

5.STL风格迭代器遍历容器

对于每一个容器类,Qt都提供了两种类型的STL风格迭代器数据类型:一种提供只读访问;另一种提供读写访问。STL风格迭代器的两种分类见表2.3。

8d3a421cf5e5d9bb3e4fc92a93f02679.png

Qt容器类的对象模型及应用(线性结构篇:对于QList来说,sharable默认是false的,但对于接下来讲的QVector来说,sharable默认是true)

用Qt做过项目开发的人,肯定使用过诸如QList.QVector.QLinkList这样的模板容器类,它们虽然名字长的不同,但使用方法都大致相同, 因为其使用方法都大体相同,很多人可能随便拿一个容器类 ...

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

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

Qt——容器类(译)

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

Qt容器类汇总说明

版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt容器类汇总说明     本文地址:http://techieliang.com/2017/ ...

Qt容器类之二:迭代器

一.介绍 遍历一个容器可以使用迭代器(iterators)来完成,迭代器提供了一个统一的方法来访问容器中的项目.Qt的容器类提供了两种类型的迭代器:Java风格迭代器和STL风格迭代器.如果只是想按顺 ...

Qt容器类之一:Qt的容器类介绍

一.介绍 Qt库提供了一套通用的基于模板的容器类,可以用这些类存储指定类型的项.比如,你需要一个大小可变的QString的数组,则使用QVector. 这些容器类比STL ...

Qt容器类之三:通用算法

在头文件中,Qt提供了一些全局的模板函数,这些函数是可以使用在容器上的十分常用的算法.我们可以在任何提供了STL风格迭代器的容器类上用这些算法,包括QList.Q ...

Qt容器类的对象模型及应用(线性结构篇)(好多图,比较清楚)

用Qt做过项目开发的人,肯定使用过诸如QList.QVector.QLinkList这样的模板容器类,它们虽然名字长的不同,但使用方法都大致相同, 因为其使用方法都大体相同,很多人可能随便拿一个容器类 ...

随机推荐

玩转 Linux 系统的方法论

Linus 说“Just for fun”,而我要说“Just for 折腾”.想知道我是怎样折腾 Linux 的,请看下面这个截图: 从这个截图可以看出,我为了“折腾” Linux 系统,在我的电脑 ...

cocoapods导入shareSDK分享实现

这个在官方文档没有说这两个库是必须导入的,但是不导入是会有错误的 pod 'ShareSDK3/ShareSDKConfigurationFile' pod 'ShareSDK3/ShareSDKEx ...

jboss漏洞导致服务器中毒

中毒现象 1. 网络出现拥塞,访问延迟增加. 2. 系统定时任务表中出现异常的定时任务. 3. 出现异常进程. 4. $JBOSS_HOME/bin或/root目录下出现大量的异常文件.     现象 ...

SpinLock 实现

/* Example: SpinLock Description: SpinLock is the lock implementation using AtomicInteger as a primi ...

poj 1269 Intersecting Lines

题目链接:http://poj.org/problem?id=1269 题目大意:给出四个点的坐标x1,y1,x2,y2,x3,y3,x4,y4,前两个形成一条直线,后两个坐标形成一条直线.然后问你是 ...

剪花布条 - HDU 2087(简单KMP &vert; 暴力)

分析:基础的练习............... ============================================================================ ...

c&num;笔记之启动新线程

可已通过下面方法来启动一个新线程并执行相应的方法 new Thread(new ThreadStart(new Action(() =>                        {     ...

常用的CI笔记

1. thinkphp 封装好的$this->success(),就直接实现成功跳转,$this->error(),错误跳转.CI有show_error(),但是却不能直接实现跳转,所以需 ...

TCP TIME WAIT

根据TCP协议定义的3次握手断开连接规定,发起socket主动关闭的一方 socket将进入TIME_WAIT状态,TIME_WAIT状态将持续2个MSL(Max Segment Lifetime) ...

069、Calico的默认连通性(2019-04-12 周五)

参考https://www.cnblogs.com/CloudMan6/p/7536746.html   Calico 跨主机连通性测试   root@host1:~# docker exec bbo ...


版权声明:本文为weixin_34889287原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。