版权声明:若无来源注明,Techie亮博客文章均为原创。 转载请以链接形式标明本文标题和地址:
本文标题:QList和QVector使用     本文地址:http://techieliang.com/2017/12/563/

1. 介绍

QVector

The QVector class is a template class that provides a dynamic array.

QVector<T> is one of Qt’s generic container classes. It stores
its items in adjacent memory locations and provides fast index-based
access.

QList<T>, QLinkedList<T>, QVector<T>, and
QVarLengthArray<T> provide similar APIs and functionality. They
are often interchangeable, but there are performance consequences. Here
is an overview of use cases:

QVector should be your default first choice. QVector<T> will
usually give better performance than QList<T>, because
QVector<T> always stores its items sequentially in memory, where
QList<T> will allocate its items on the heap unless sizeof(T)
<= sizeof(void*) and T has been declared to be either a
Q_MOVABLE_TYPE or a Q_PRIMITIVE_TYPE using Q_DECLARE_TYPEINFO. See the
Pros and Cons of Using QList for an explanation.
However, QList is used throughout the Qt APIs for passing parameters and
for returning values. Use QList to interface with those APIs.
If you need a real linked list, which guarantees constant time
insertions mid-list and uses iterators to items rather than indexes, use
QLinkedList.

Note: QVector and QVarLengthArray both guarantee C-compatible array
layout. QList does not. This might be important if your application must
interface with a C API.

Note: Iterators into a QLinkedList and references into
heap-allocating QLists remain valid as long as the referenced items
remain in the container. This is not true for iterators and references
into a QVector and non-heap-allocating QLists.

Here’s an example of a QVector that stores integers and a QVector that stores QString values:

更多请见QVector

QList:

The QList class is a template class that provides lists.

QList<T> is one of Qt’s generic container classes. It stores
items in a list that provides fast index-based access and index-based
insertions and removals.

QList<T>, QLinkedList<T>, and QVector<T> provide
similar APIs and functionality. They are often interchangeable, but
there are performance consequences. Here is an overview of use cases:

QVector should be your default first choice. QVector<T> will
usually give better performance than QList<T>, because
QVector<T> always stores its items sequentially in memory, where
QList<T> will allocate its items on the heap unless sizeof(T)
<= sizeof(void*) and T has been declared to be either a
Q_MOVABLE_TYPE or a Q_PRIMITIVE_TYPE using Q_DECLARE_TYPEINFO. See the
Pros and Cons of Using QList for an explanation.
However, QList is used throughout the Qt APIs for passing parameters and
for returning values. Use QList to interface with those APIs.
If you need a real linked list, which guarantees constant time
insertions mid-list and uses iterators to items rather than indexes, use
QLinkedList.

Note: QVector and QVarLengthArray both guarantee C-compatible array
layout. QList does not. This might be important if your application must
interface with a C API.

Note: Iterators into a QLinkedList and references into
heap-allocating QLists remain valid as long as the referenced items
remain in the container. This is not true for iterators and references
into a QVector and non-heap-allocating QLists.

更多请见QList

QList<T>, QLinkedList<T>, and QVector<T>等使用操作近似,下述范例仅提供QList的

2. QList使用

2.1. 简单范例

  1. #include <QList>
  2. #include <QDebug>
  3. QList<QString> m_list;
  4. m_list.append("a");//尾插入
  5. m_list.append("b");
  6. m_list.append("c");
  7. qDebug()<<m_list.at(0)<<
  8. m_list[1]<<
  9. m_list[m_list.size()-1];
  10. qDebug()<<m_list.first()<<m_list.last();//取首尾值
  11. m_list.prepend("t");//头插入
  12. qDebug()<<m_list.at(0);
  13. qDebug()<<m_list.takeAt(2);//取出值(会删除原值)
  14. qDebug()<<m_list.at(2);

运行结果

  1. "a" "b" "c"
  2. "a" "c"
  3. "t"
  4. "b"
  5. "c"

2.2. 其他函数

insert在指定位置插入
swap交换两个位置的值
contains是否包含判断
count查找某个值的个数
indexOf找某个值对应的位置

2.3. 迭代器风格

支持Java和STL风格,详情请见Qt容器介绍

转载请以链接形式标明本文标题和地址:Techie亮博客 » QList和QVector使用

QList和QVector使用的更多相关文章

  1. QList介绍(QList比QVector更快,这是由它们在内存中的存储方式决定的。QStringList是在QList的基础上针对字符串提供额外的函数。at()操作比操作符[]更快,因为它不需要深度复制)非常实用

    FROM:http://apps.hi.baidu.com/share/detail/33517814 今天做项目时,需要用到QList来存储一组点.为此,我对QList类的说明进行了如下翻译. QL ...

  2. QList和QVector等容器的区别

    QList和QVector等容器的区别. 1.大多数情况下可以用QList.像prepend()和insert()这种操作,通常QList比QVector快的多.这是因为QList是基于index标签 ...

  3. QList和QVector等容器的区别:(转)

    源地址:https://blog.csdn.net/qq_33266987/article/details/53333373 Qlist.QVector 与 list.vector似乎不太类似: li ...

  4. QList, QLinkedList, QVector, QStack, QQueue的区别,以前也没见过QCache,而且可以自定义cost

    http://doc.qt.io/qt-4.8/containers.html http://doc.qt.io/qt-4.8/qcache.html

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

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

  6. QVector 和vector的比较

    QVector和vector的比较: Qvector默认使用隐式共享,可以用setSharable改变其隐式共享.使用non-const操作和函数将引起深拷贝.at()比operator[](),快, ...

  7. QVector 和vector的比较(QVector默认使用隐式共享,而且有更多的函数提供)

    QVector和vector的比较: Qvector默认使用隐式共享,可以用setSharable改变其隐式共享.使用non-const操作和函数将引起深拷贝.at()比operator[](),快, ...

  8. Qt中容器类应该如何存储对象(最好使用对象指针类型,如:QList<TestObj*>,而不要使用 QList<TestObj> 这样的定义,建议采用 智能指针QSharedPointer)

    Qt提供了丰富的容器类型,如:QList.QVector.QMap等等.详细的使用方法可以参考官方文档,网上也有很多示例文章,不过大部分文章的举例都是使用基础类型:如int.QString等.如果我们 ...

  9. Qt:QVector

    0.说明 template <typename T> class QVector QVector是存储同一个类型T数据的模板类,其功能是动态数组,数据在其中的存储是一系列连续的存储空间. ...

随机推荐

  1. 网站漏洞修复案例之Discuz!3.4最新版本

    Discuz!论坛目前最新版本为3.4版本,已经好久没有更新了,我们SINE安全在对其网站安全检测的同时发现一处漏洞,该漏洞可导致论坛的后台文件可以任意的删除,导致网站瘫痪,后台无法登陆.关于该网站漏 ...

  2. leetcode记录-罗马数字转整数

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并 ...

  3. 20155222 2016-2017-2 《Java程序设计》实验二

    1 测试 public class MyUtil{ public static String percentage2fivegrade(int grade){ //如果成绩小于60,转成"不 ...

  4. 20155307 2016-2017 《Java程序设计》第三次实验报告

    (一)敏捷开发与XP 敏捷开发是一种以人为核心.迭代.循序渐进的开发方法."敏捷流程"是一系列价值观和方法论的集合.从2001年开始,一些软件界的专家开始倡导"敏捷&qu ...

  5. Qt QStringLiteral

    zz 解释QStringLiteral 原文发表于woboq网站  QStringLiteral explained 转载 原作者: Olivier Goffart 译者:zzjin QStringL ...

  6. day1 Opencv安装 python 2.7 (32位)

    [参考安装步骤] http://opencv-python-tutroals.readthedocs.io/en/latest/index.html http://blog.csdn.net/huru ...

  7. 【BZOJ4803】逆欧拉函数

    [BZOJ4803]逆欧拉函数 题面 bzoj 题解 题目是给定你\(\varphi(n)\)要求前\(k\)小的\(n\). 设\(n=\prod_{i=1}^k{p_i}^{c_i}\) 则\(\ ...

  8. CF 1083 A. The Fair Nut and the Best Path

    A. The Fair Nut and the Best Path https://codeforces.com/contest/1083/problem/A 题意: 在一棵树内找一条路径,使得从起点 ...

  9. jsp命名规则

    jsp也用驼峰规则命名即可,不要使用下划线,否则在tomcat中容易出现解析错误

  10. linux设置定时任务调用接口

    1.设置目录 cd /var/spool/cron 2.编辑文件(当前登录用户,不一定是root) vim root 3.添加内容 0 0 * * * wget http://192.144.141. ...