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相关推荐

  1. 【Android 修炼手册】常用技术篇 -- Android 自定义 View

    这是[Android 修炼手册]系列第 9 篇文章,如果还没有看过前面系列文章,欢迎点击 这里 查看- 预备知识 了解 android 基本开发 看完本文可以达到什么程度 学会自定义 View 以及其 ...

  2. Qt修炼手册10_QTableWidget控件使用说明及实践

    1.QTableWidget类简介 QTableWidget是QT对话框设计中常用的显示数据表格的控件. QTableWidget继承于类QTableView,所以在学习QTableWidget之前可 ...

  3. 【Android 修炼手册】常用技术篇 -- 聊聊 Android 的打包

    这是[Android 修炼手册]系列第 10 篇文章,如果还没有看过前面系列文章,欢迎点击 这里 查看- 预备知识 了解 android 基本开发 看完本文可以达到什么程度 了解 Android AP ...

  4. 【Android 修炼手册】常用技术篇 -- Android 热修复解析

    这是[Android 修炼手册]第 8 篇文章,如果还没有看过前面系列文章,欢迎点击 这里 查看- 预备知识 了解 android 基本开发 了解 ClassLoader 相关知识 看完本文可以达到什 ...

  5. 【Android 修炼手册】常用技术篇 -- Android 插件化解析

    预备知识 了解 android 基本开发 了解 android 四大组件基本原理 了解 ClassLoader 相关知识 看完本文可以达到什么程度 了解插件化常见的实现原理 阅读前准备工作 clone ...

  6. Qt修炼手册9_Ui名字空间及setupUi()原理解读

    1.前言 用最新的QtCreator选择GUI的应用会产生含有如下文件的工程: 1.1 *.pro文件 QT += core gui //使用Qt的Core和Gui模块.QT将自己的库函数分为多个模块 ...

  7. Qt修炼手册6_图形:图形视图框架

    1.前言 主要为了学习可以在GUI上有效显示或管理大量图形对象的API,以及进行显示.扩大.缩小等操作. 2.图形视图框架(Graphics View Framework) 图形视图框架使用BSP树算 ...

  8. Qt修炼手册12_线程同步与线程等待条件

    1.同步线程:何为同步? 参考百度百科: 1.1 线程 线程是进程中的一个实体,是被系统独立调度和分配的基本单位.一个进程可以有多个线程,一个线程必须有一个父进程,线程自己不拥有系统资源,只有运行必须 ...

  9. Qt修炼手册11_多线程编程和QThread类

    1.事件循环 学习QT多线程编程之前,有必要先熟悉事件循环的概念. 先看一个单线程界面程序的主函数代码: int main(int argc, char* argv[]) {QApplication ...

最新文章

  1. 京东11·11:撬动数据中心的支点——京东阿基米德
  2. 百度 Java 后端三轮面试题,这些你会吗?
  3. boost::filesystem模块打印文件状态的测试程序
  4. 浅谈PopupWindow弹出菜单
  5. Java 9进入第一轮问题修复阶段
  6. 关于tcmalloc\malloc和new
  7. SpringBoot默认的错误处理机制
  8. 真格量化——50期权历史波动率策略
  9. 20150702 问题随记
  10. php insert方法,lInsert 命令/方法/函数
  11. 没来得及整理的一些网站
  12. python:容器、迭代器、生成器 简单介绍
  13. 【转】HTTP响应报文与工作原理详解
  14. Mysql 分组聚合实现 over partition by 功能
  15. CentOS7 下MariaDB安装与简单配置
  16. Excel如何将多个工作簿数据合并到一起
  17. Linux命令行使用bypy上传文件到百度网盘
  18. 【转】Photoshop 用户名.组织或序列号丢失或无效.应用程序无法继续.
  19. 简述计算机领域最高国际奖是什么奖,清华大学团队蝉联高性能计算应用领域国际最高奖...
  20. 达观数据:文字的起源与文本挖掘的前世今生

热门文章

  1. 设计模式:结构型模式总结
  2. 易宝典文章——用ISA 2006标准版发布Exchange 2010的OWA系列之申请Excha
  3. 如何用笔记本建立wifi热点
  4. UBOOT 2011-3版本分析(初步感受)
  5. Altiris 7.1 安装
  6. Linux下base64命令工具的使用
  7. hdu 2544最短路(Dijkstra)
  8. NYOJ 155 求高精度幂
  9. 日期正则表达式yyyyMMdd
  10. lucene 索引优化