Qt修炼手册8_常用的容器类QVector和QList
1.前言
Qt提供了非常有用的容器类的迭代器类,用于修改、删除、插入和保存数据。本着学习的角度,重点研究了QVector和QList两个类。QT中,具有STL风格的迭代器具有两种数据类型,分别是只读访问模式和读写访问模式。具体见下表:STL风格的迭代器的运行方式是在数组中使用指针。例如,++运算符,*运算符用于返回迭代器的项。
2.QList类、QLinkedList类和QVector类
在开发一个较高性能需求的应用程序时,我们会比较关注这些容器类的运行效率,下表列出了QList、QLinkedList和QVector容器的时间复杂度比较。2.1 QList类
QList<T>是迄今为止最常用的容器类,它存储给定数据类型T的一列数值。
QList不仅提供了可以在列表进行追加的QList::append()和QList::prepend()函数,还提供了在列表中间完成插入操作的函数QList::insert()。
QList<T>维护了一个指针数组,该数组存储的指针指向QList<T>存储的列表项的内容。
对于不同的数据类型,QList<T>采取不同的存储策略,存储策略有以下几种。
(1)如果T是一个指针类型或指针大小的基本类型(即该基本类型占有的字节数和指针类型占有的字节数相同),QList<T>会将数值直接存储在它的数组中。
(2)如果QList<T>存储对象的指针,则该指针指向实际存储的对象。
下面举一个例子:#include "stdafx.h" #include "QtCore\qdebug.h"int _tmain(int argc, _TCHAR* argv[]) {QList<QString> list;QString str = "I love Qt Programming!";list << str;qDebug()<<list[0]<<endl<<"How are you?"<<endl;return 0; }
2.2 QLinkedList类
QLinkedList<T>是一个链式列表,它以非连续的内存块保存数据。
QLinkedList<T>不能使用下标,只能使用迭代器访问它的数据项。2.3 QVector类
QVector<T>在相邻的内存中存储给定数据类型T的一组数值。
QVector<T>既可以使用下标访问数据项,也可以使用迭代器访问数据项。
Qt修炼手册8_常用的容器类QVector和QList相关推荐
- 【Android 修炼手册】常用技术篇 -- Android 自定义 View
这是[Android 修炼手册]系列第 9 篇文章,如果还没有看过前面系列文章,欢迎点击 这里 查看- 预备知识 了解 android 基本开发 看完本文可以达到什么程度 学会自定义 View 以及其 ...
- Qt修炼手册10_QTableWidget控件使用说明及实践
1.QTableWidget类简介 QTableWidget是QT对话框设计中常用的显示数据表格的控件. QTableWidget继承于类QTableView,所以在学习QTableWidget之前可 ...
- 【Android 修炼手册】常用技术篇 -- 聊聊 Android 的打包
这是[Android 修炼手册]系列第 10 篇文章,如果还没有看过前面系列文章,欢迎点击 这里 查看- 预备知识 了解 android 基本开发 看完本文可以达到什么程度 了解 Android AP ...
- 【Android 修炼手册】常用技术篇 -- Android 热修复解析
这是[Android 修炼手册]第 8 篇文章,如果还没有看过前面系列文章,欢迎点击 这里 查看- 预备知识 了解 android 基本开发 了解 ClassLoader 相关知识 看完本文可以达到什 ...
- 【Android 修炼手册】常用技术篇 -- Android 插件化解析
预备知识 了解 android 基本开发 了解 android 四大组件基本原理 了解 ClassLoader 相关知识 看完本文可以达到什么程度 了解插件化常见的实现原理 阅读前准备工作 clone ...
- Qt修炼手册9_Ui名字空间及setupUi()原理解读
1.前言 用最新的QtCreator选择GUI的应用会产生含有如下文件的工程: 1.1 *.pro文件 QT += core gui //使用Qt的Core和Gui模块.QT将自己的库函数分为多个模块 ...
- Qt修炼手册6_图形:图形视图框架
1.前言 主要为了学习可以在GUI上有效显示或管理大量图形对象的API,以及进行显示.扩大.缩小等操作. 2.图形视图框架(Graphics View Framework) 图形视图框架使用BSP树算 ...
- Qt修炼手册12_线程同步与线程等待条件
1.同步线程:何为同步? 参考百度百科: 1.1 线程 线程是进程中的一个实体,是被系统独立调度和分配的基本单位.一个进程可以有多个线程,一个线程必须有一个父进程,线程自己不拥有系统资源,只有运行必须 ...
- Qt修炼手册11_多线程编程和QThread类
1.事件循环 学习QT多线程编程之前,有必要先熟悉事件循环的概念. 先看一个单线程界面程序的主函数代码: int main(int argc, char* argv[]) {QApplication ...
最新文章
- 京东11·11:撬动数据中心的支点——京东阿基米德
- 百度 Java 后端三轮面试题,这些你会吗?
- boost::filesystem模块打印文件状态的测试程序
- 浅谈PopupWindow弹出菜单
- Java 9进入第一轮问题修复阶段
- 关于tcmalloc\malloc和new
- SpringBoot默认的错误处理机制
- 真格量化——50期权历史波动率策略
- 20150702 问题随记
- php insert方法,lInsert 命令/方法/函数
- 没来得及整理的一些网站
- python:容器、迭代器、生成器 简单介绍
- 【转】HTTP响应报文与工作原理详解
- Mysql 分组聚合实现 over partition by 功能
- CentOS7 下MariaDB安装与简单配置
- Excel如何将多个工作簿数据合并到一起
- Linux命令行使用bypy上传文件到百度网盘
- 【转】Photoshop 用户名.组织或序列号丢失或无效.应用程序无法继续.
- 简述计算机领域最高国际奖是什么奖,清华大学团队蝉联高性能计算应用领域国际最高奖...
- 达观数据:文字的起源与文本挖掘的前世今生