QT容器类之顺序存储容器(简介)

"""
容器 Containers,有时候也被称为集合 collections,指的是能够在内存中存储其他特
定类型的对象的对象,这种对象一般是通用的模板类。
谓平台无关,即Qt容器类不因编译器的不同而具有不同的实现;所谓“隐式数据共享”,也可以称作“写时复制copy on write”,这种技术允许在容器类中使用传值参数,而不会发生额外的性能损失。Qt容器类提供了类似Java的遍历器语法,同样也提供了类似STL的遍历器语法,
以方便用户选择自己习惯的编码方式。最后一点,在一些嵌入式平台,STL往往是不可用的,这时你就只能使用Qt提供的容器类,除非你想自己创建。
"""
"""
第一个顺序存储容器是QVector<T>,即向量。QVector<T>是一个类似数组的容器,它将数据存储在连续内存区域。
QVector<T>知道它自己的长度,并且可以改变大小。对于获取随机位置的数据,或者是在末尾处添加数据,
QVector<T>的效率都是很高的,但是,在中间位置插入数据或者删除数据,它的效率并不是很高。
"""
"""
Qt 提供了顺序存储容器:QList,Q LinkedList,QVector,QStack 和 QQueue。对于绝
大多数应用程序, QList 是最好的选择。虽然它是基于数组实现的列表,但它提供了快速的
向前添加和向后追加的操作。如果你需要链表,可以使用 QLinkedList。如果你希望所有
元素占用连续地址空间,可以选择 QVector。 QStack 和 QQueue 则是 LIFO 和 FIFO 的
----
Qt 还提供了关联容器: QMap, QMultiMap, QHash , QMultiHash 和 QSet。带有“Multi”
字样的容器支持在一个键上面关联多个值。“Hash”容器提供了基于散列函数的更快的查找,
而非 Hash 容器则是基于二分搜索的有序集合。
另外两个特例:QCache 和 QContiguousCache 提供了在有限缓存空间中的高效 hash 查
找。
"""
"""
QList<t>:最通用的窗口,给定类型t的对象列表形式进行存储,与一个整形的索引关联,在内部使用数组实现,
同时提供了快速访问这些索引,可以使用方法append()和prepend()在列表尾部或者头部添加元素,也可以使用insert()在指定位置插入元素
继承于qlist<qstring>类
"""
"""
qlinkedlist<t>,类似于qlist,除了可以遍历,而不是基于整数索引随机访问,对于在中部插入大量数据,性能高于qlist
同时具有更好的遍历器语义(只要数据存在,它的遍历器会指向合法元素,当插入或者删除数据时,qlist遍历器会指向一个非法值)
"""
"""
qvector 用于在内存中连续区存储一系列给定类型的值,在头部或者中间插入数据可能会非常慢,因为这会引起大量数据在内存中移动
----
qstack<t>是qvector子类,后进先出(lifo)语义,相比qvector,它提供了几个函数:push(),pop(),top()
----
queue<t>是qlist子类,先进先出(fifo)语义,相比qlist,提供了几个函数:enqueue(),dequeue(),head()
qset<t>提供单值数学上面的集合,具有快速查找性能
"""
"""
qmap(key,t)字典数据结构(关联数组),将类型t值同类型key键关联起来,通常每个键与一个值关联,qmap以键顺序存储数据,如果是顺序无关,qhash提供更好性能
----
qmultimap<key,t>是qmap子类,提供多值映射,一个键对象多个值
----
qhash<key,t>与qmap接口几乎相同,但是提供了更快的查找,以字母顺序存储数据
qmultihash<key,t>是qhash子类,提供多值散列
"""
"""
所有的容器都可以嵌套。例如, QMap<QString, Q List<int> >是一个映射,其键是 QString
类型,值是 QList<int>类型,也就是说,每个值都可以存储多个 int。
能够存储在容器中的数据必须是可赋值数据类型。所谓可赋值数据类型,是指具有默认构造
函数、拷贝构造函数和赋值运算符的类型。绝大多数数据类型,包括基本类型,比如 int 和
double,指针,Qt 数据类型,例如 QString、QDate 和 QTime,都是可赋值数据类型。但
是,QObject 及其子类(QWidget、QTimer 等)都不是。也就是说,你不能使用
QList<QWidget>这种容器,因为 QWidget 的拷贝构造函数和赋值运算符不可用。如果你
需要这种类型的容器,只能存储其指针,也就是 QList<QWidget *>
如果要使用 QMap 或者 QHash,作为键的类型必须提供额外的辅助函数。QMap 的键必
须提供 operator<()重载,QHash 的键必须提供 operator==()重载和一个名字是 qHash()
的全局函数。
Qt 容器类可以直接使用 QDataStream 进行存取。此时,容器中所存储的类型必须也能够
使用 QDataStream 进行存储。这意味着,我们需要重载 operator<<()和 operator>>()运算

"""

更多请下载:http://vdisk.weibo.com/s/rtCAtswlNbj

QT容器类之顺序存储容器(简介)

时间: 2024-07-31 03:29:04

QT容器类之顺序存储容器(简介)的相关文章

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

一.介绍 Qt库提供了一套通用的基于模板的容器类,可以用这些类存储指定类型的项.比如,你需要一个大小可变的QString的数组,则使用QVector<QString>. 这些容器类比STL(C++标准模板库)容器设计得更轻量.更安全并且更易于使用.如果对STL不熟悉,或者倾向于用"Qt的方式",那么你可以使用这些类,而不去使用STL的类. 你可以用两种方式遍历容器内存储的项:Java风格的迭代器和STL风格的迭代器.Java风格的迭代器更易于使用,并且提供了更高级的功能:S

Qt容器类(总结)

Introduction Qt库提供了一组基于模板的一般化的容器类.这些容器可以存储指定的类型的元素.例如,如果你需要一个可变大小的Qstring数组,可以用QVector<QString>.. 这些容器比STL容器更轻更安全更容易使用.如果你不熟悉STL或者更喜欢以Qt的方式做事,你可以用这些类取代STL类. 这些类是隐式共享的,它们都是可重入,它们进行了速度优化,用更少的内存和最小的内联代码扩展,生成更小的可执行文件.此外,当所有的线程仅仅以只读的方式访问它们时,它们是线程安全的. 为了遍

STL&lt;一&gt;:主要容器简介

vector : 向量 list : 双向链表容器,提供数据结构中链表的所有功能 queue : 队列容器,提供数据结构中队列的所有功能 stack : 栈容器,提供数据结构中栈的所有功能 deque : 双端栈容器,提供数据结构中栈的所有功能 priority_queue : 优先队列,一种按值排序的队列容器 set : 集合容器 multiset : 允许出现重复元素的集合容器 map<key,value> ; 关联数组容器 multimap<key,value> : 允许出现

Spring(二)核心容器 - 简介 、BeanFactory、ApplicationContext

目录 前言 1.容器简介 2.容器的结构 2.1 BeanFactory 2.2 ApplicationContext 2.2.1 ConfigurableApplicationContext 2.2.2 WebApplicationContext 2.3 差异对比 3.ApplicationContext 准备启动 4.总结 前言 在上篇文章中,和大家一起讨论了 Spring 的整体架构,其大致分为五个模块:核心容器.AOP.Web.Data 数据访问.Test模块.其中核心容器是 Sprin

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

用Qt做过项目开发的人,肯定使用过诸如QList.QVector.QLinkList这样的模板容器类,它们虽然名字长的不同,但使用方法都大致相同, 因为其使用方法都大体相同,很多人可能随便拿一个容器类来使用,但却不知道这种选择是不是最优,这对于对性能要求不苛刻的应用,这种选择不会有任何影响,但是若性能要求苛刻的应用,无疑直接影响到你的系统的成败.上述提及的容器类本质上是对数据结构中的线性结构的不同的实现,本文通过介绍各容器类的实现原理,让我们知道什么时候该用什么样的容器,让大家不再感到迷茫. 1

Java集合容器简介

Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),AttributeList(1.5),RoleList(1.5),RoleUnresolvedList(1.5), ConcurrentLinkedQueue(1.5),ArrayBlockingQueue(1.5),LinkedBlockingQueue(1.5), PriorityQueue(1.5),

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

用Qt做过项目开发的人,肯定使用过诸如QList.QVector.QLinkList这样的模板容器类,它们虽然名字长的不同,但使用方法都大致相同, 因为其使用方法都大体相同,很多人可能随便拿一个容器类来使用,但却不知道这种选择是不是最优,这对于对性能要求不苛刻的应用,这种选择不会有任何影响,但是若性能要求苛刻的应用,无疑直接影响到你的系统的成败.上述提及的容器类本质上是对数据结构中的线性结构的不同的实现,本文通过介绍各容器类的实现原理,让我们知道什么时候该用什么样的容器,让大家不再感到迷茫. 1

STL容器简介

C++标准定义了一系列的容器的共通要求,适用于所有的STL容器,然而由于C++11带来了容器的多样化,因此可能出现若干例外. ?初始化: 每个容器都提供了一个default构造函数,一个copy函数和一个析构函数 ? ? ?

JavaEE容器简介

1.定义 容器就是组件和底层服务细节之间的接口.在web组件.企业级Bean等能够执行之前,它必须被装配为一个JavaEE模块,并部署在容器上.如下图: 装配的过程主要包括:定制容器事务管理特性:JNDI服务等.当然,在JAVA EE中,各种不同类型的模块既可以单独打包(JAR)部署,也可以将这些模块综合起来做成一个EAR包进行部署. 2.服务 JavaEE容器提供了企业应用开发中的各种服务.如,处理事务管理.管理EJB和Servlet的生命周期.数据库连接池.数据持久化等底层复杂的细节. 3.