QT容器类

QT提供了一系列容器类,如QVector、QList、QLinkedList等,它们具有不同的特性和适用场景。QVector适用于快速索引存取,QLinkedList适合随机插入删除,而QList结合两者优点。QT容器类支持迭代器、Foreach关键字,同时还有QMap、QHash等关联容器类。QT容器类是线程安全的,提供了丰富的操作函数,如size()、resize()等,并且可以与STL兼容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QT不仅支持C++STL模板库,同时自己也定义了一套容器类和与之操作的算法类,使用QT定义的这一套库,可以使在各个平台的表现相同。QT的这些容器被设计为更轻便,更安全和更容易使用。容器类是隐含共享(implicitly)的,可重入(reentrant)的和线程安全的。为容器遍历提供了两种迭代器(java-styleSTL-style),并且QT提供了foreach关键字,更加方便元素遍历。


连续容器:

QVector<T>  

它是QT里最常见的容器类,它对应STL中的Vector<T>容器,是动态数组,提供快速的索引存取。

QList<T>  QLinkList<T>  QVarLengthArray<T>提供类似的功能。

可以参考帮助文档,查看QList的具体使用方法,以下列出部分使用示例:

1.创建各种类型的vector:

  QVector<int> integerVector;

  QVector<QString> stringVector;

2.创建一定数目项的vector

  QVector<QString> vector(200);

3.带初始化的创建vector

  QVector<QString> vector(200, "Pass");

也可以使用fill赋值:

  QVector<QString> vector(3);

  vector.fill("Yes");

  // vector: ["Yes", "Yes", "Yes"]

  vector.fill("oh", 5);

  // vector: ["oh", "oh", "oh", "oh", "oh"]

4.QVectorc++Vector一样提供[]下标操作,并从0项开始。还提供at()的只读操作,at()[]更快,因为它不会导致深度复制。

  if (vector[0] == "Liz")

  vector[0] = "Elizabeth";

  for (int i = 0; i < vector.size(); ++i) {

    if (vector.at(i) == "Alfonso")

        cout << "Found Alfonso at position " << i << endl;

  }

5.你可以使用indexOflastIndexOf来查询获取某项值的索引:

  QVector<QString> vector;

  vector << "A" << "B" << "C" << "B" << "A";

  vector.indexOf("B");            // returns 1

  vector.indexOf("B", 1);         // returns 1

  vector.indexOf("B", 2);         // returns 3

  vector.indexOf("X");            // returns -1

  vector.lastIndexOf("B");        // returns 3

  vector.lastIndexOf("B", 3);     // returns 3

  vector.lastIndexOf("B", 2);     // returns 1

  vector.lastIndexOf("X");        // returns -1

也可以用contains()查看是否包含某元素,返回bool值。

6.通过appendoperator<<prependinsert添加元素。(对于较大的vector来说,在开头和中间插入项都是相当耗时的。这种情况更适合使用QLinkedList<T>

  QVector<QString> vector(0);

  vector.append("one");

  vector.append("two");

  vector.append("three");

  // vector: ["one", "two", "three"]

  QVector<QString> vector(0);

  vector << “one” << “two” << “three”;

  // vector: ["one", "two", "three"]

  QVector<QString> vector;

  vector.prepend("one");

  vector.prepend("two");

  vector.prepend("three");

  // vector: ["three", "two", "one"]

  QVector<QString> vector;

  vector << "alpha" << "beta" << "delta";

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值