• Qt容器类总结


    Qt的容器类比标准模板库(STL)中的容器类更轻巧、安全和易于使用。这些容器类是隐式共享和可重入的,而且他们进行了速度和存储的优化,因此可以减少可执行文件的大小。此外,他们还是线程安全的,也就是说他们作为只读容器时可被多个线程访问。

    (隐式共享:是对象的管理方法。一个对象被隐式共享,只是传递该对象的一个指针给使用者,而不实际复制对象数据,只有在使用者修改数据时,才实质复制共享对象给使用者。)

    一、顺序容器类

    Qt的顺序容器类有:QList、QLinkedList、QVector、QStack和QQueue。

    1.QList

    insert()、replace()、removeAt()、move()、swap()、append()、prepend()、removeFirst()、removeLast()等。

    QList<QString> list;
    list << "one" << "two" << "three";
    QString str1 = list[1];     //str1 =="two"
    QString str0 = list.at(0);    //str0 =="one"

    2.QLinkedList

    QLinkedList<T>是链式列表,数据项不是用连续的内存存储的,它基于迭代器访问数据项,并且插入和删除数据项的操作时间相同。

    3.QVector

    QVector<T>提供动态数组的功能,以下标索引访问数据。

    QVector的函数接口与QList几乎完全相同,QVector<T>的性能比QList<T>更高,因为QVector<T>的数据项是连续存储的。

    4.QStack

    QStack<T>提供类似于堆栈的后入先出操作的容器类,push()和pop()是主要的接口函数。

    QStack<int> stack;
    stack.push(10);
    stack.push(20);
    stack.push(30);
    while(!stack.isEmpty())
        cout << stack.pop() << endl;
    

    5.QQueue

    QQueue<T>是提供类似于队列先入先出操作的容器类,enqueue()和dequeue()是主要操作函数。

    QQueue<int> queue;
    queue.enqueue(10);
    queue.enqueue(20);
    queue.enqueue(30);
    while(!queue.isEmpty())
        cout << queue.dequeue() << endl;
    

    二、关联容器类

    Qt的关联容器类有:QSet、QMap、QMultiMap、QHash和QMultiHash。

    1.QSet

    QSet是基于散列表的集合模板类,他存储数据的顺序是不定的,查找值的速度非常快。

    QSet<QString> set;
    set << "dog" << "cat" << "tiger";
    if(!set.contains("cat"))
        .....
    

    2.QMap

    QMap<Key, T>提供一个字典,一个键映射到一个值。QMap存储数据是按照键的顺序,如果不在乎存储顺序,使用QHash会更快。

    QMap<QString, int> map;
    map["one"] = 1;
    map["two"] = 2;
    map["three"] = 3;
    
    map.insert("four", 4);
    map.remove("two");
    int num1 = map["one"];
    int num2 = map.value("two");
    

    3.QMultiMap

    QMultiMap是QMap的子类,是用于处理多值映射的遍历类。也就是一个键对应多个值。

    QMultiMap不提供"[]"操作符,使用value()函数访问最新插入的键的单个值。如果要获取一个键对应的所有值,使用values()函数,返回值是QList<T>类型。

    QMultiMap<QString, int> map1, map2, map3;
    map1.insert("plenty", 100);
    map1.insert("plenty", 2000);
    map2.insert("plenty", 5000);
    map3 = map1 + map2;
    
    
    QList<int> values = map.values("plenty");
    for(int i = 0; i < values.size(); i++)
        cout << values.at(i) << endl;
    

    4.QHash是基于散列表来实现字典功能的模板类,QHash<Key, T>存储的键值对具有非常快的查找速度。用法和QMap,QMultiHash用法和QMultiMap相同。

    Study in 《Qt5.9 C++开发指南》

  • 相关阅读:
    Scrapy学习-7-数据存储至数据库
    Scrapy学习-6-JSON数据处理
    Scrapy学习-5-下载图片实例
    Scrapy学习-4-Items类&Pipelines类
    Scrapy学习-3-Request回调巧用
    Scrapy学习-2-xpath&css使用
    iTunes.exe 在win7系统中运行出错解决办法
    [转]手机浏览器的User-Agent汇总
    apple mobile device服务无法启动,错误1053 解决
    [转]EF 4.1 Code First
  • 原文地址:https://www.cnblogs.com/foreversdf/p/12814209.html
Copyright © 2020-2023  润新知