当前位置: 首页>编程语言>正文

容器类和UI类 容器类别 类外

Qt中提供了一组通用的基于模板的容器类(container classes)。

与STL中的容器类相比:

1、  Qt中的容器类更轻量、更安全、更容易使用

2、  Qt容器类在所有平台上运行时表现一致,而不仅仅是接口接口一致

3、  Qt容器类都是隐式数据共享的,这使得我们在使用时可以pass-by-value而不用担心由此带来的性能问题(在没有隐式共享的情况下,如果操作类对象时使用pass-by-value的方式,会带来多次的构造与析构,详情参见”Effective C++”条款20)

4、  拥有更易使用的迭代器类(一种java风格的迭代器,Qt中也提供了STL风格的迭代器,我们可以自行选择)

5、  由于Qt容器类更加轻量,在嵌入式平台中比STL更值得使用

 Qt中的容器类分类:

1、顺序容器(容器中的数据线性存储):QList(数组列表)、QLinkedList(链表)、QVector(向量)、QStack(栈)、QQueue(队列)

2、关联容器(容器存储的是<键,值>对):QMap(skip-list-based字典)、QMultiMap、QHash(哈希表)、QMultiHash、QSet

注:带” QMulti”支持一个键多个值的情况

 容器要求:

QT容器中能存储的元素的类型是要求的:元素必须是可以赋值的数据类型,即元素类型必须有一个默认的构造函数(即无参数构造函数,或者全部参数都带有默认值的构造函数也行)、一个拷贝构造函数(拷贝构造)和一个赋值操作符函数(operator=)(这两个函数也可以由编译器提供)。基本的数据类型(int和double等)和QT部分数据类型(如 QString、QDate、QTime等)可以存储在容器中,QObject及其子类(如QWidget和Qdialog等)是不可以存储在容器中的,但QObject及其子类的指针可以存储在容器中。 

class Movie
{
public:
        Movie(const QString &title = "", int duration = 0);
        void setTitle(const QString &title) { myTitle = title; }
        QString title() const { return myTitle; }
        void setDuration(int duration) { myDuration = duration; }
        QString duration() const { return myDuration; }
private:
        QString myTitle;
        int myDuration;
};

Movie类可以放入QT容器中,第一,虽然Movie类的构造函数有两个参数,但都有默认值,Movie()写法是允许的,所以有默认构造函数;第二,Movie类没有显示定义拷贝构造函数和赋值操作符,但C++编译器会提供一个默认的实现

Qt还提供了在任意容器上执行相关操作的通用算法,这些算法与STL提供的算法类似


https://www.xamrdz.com/lan/5h91960302.html

相关文章: