概述
容器类
Qt的容器类比标准模板库中的容器类更轻巧安全和易于使用。并且是线程安全的,Qt的容器类的格式为:QList ,T 是一个具体的类型,可以是int、float等简单类型,也可以是Qstring、QDate等类型,但不能是QObject或任何其子类。T必须是一个可以赋值的类型。
Qt的容器类分为:
- 顺序容器
- 关联容器
顺序容器类: - QList
最常用的容器类,以数组列表的方式实现,在其前和其后添加数据非常快,QList以下标索引的方式对数据进行访问。
QList用于添加、插入、替换、移动、删除、数据项的函数有:insert()、replace()、removeAt()、move()、swap()、append()、prepend()、removeFirst()、removeLast()等。
例如:
QList<QString> list;
list<<"one"<<"two"<<"three";
QString str1=list[1];
Qstring str0=list.at(0);
QList的isEmpty()函数在数据项为空时返回true,size()函数返回数据项的个数。
- QLinkedList
是链式列表的容器类,数据项不是用连续的内存存储的,基于迭代器访问数据项,并且插入和删除数据项的操作时间相同。 - QVector
提供动态数组的功能,以下标索引访问数据,与QList的函数接口几乎相同,但性能比后者更高,因为QVector的数据项是连续存储的。 - QStack
类似于堆栈的后入先出操作的容器类,push()和pop()是主要的接口函数。
例:
QStack<int> stack;
stack.push(10);
stack.push(20);
stack.push(30);
while(!stack.isEmpty())
cout<<stack.pop()<<endl;
程序会依次输出:30,20,10
- QQueue
提供类似于队列先入先出操作的容器类,enqueue()和dequeue()是主要的操作函数。
例:
QQueue<int> queue;
queue.enqueue(10);
queue.enqueue(20);
queue.enqueue(30);
while(!queue.isEmpty())
cout<<queu.dequeue()<<endl;
程序会依次输出10、20、30
关联容器类:
- Qmap
- QMultimap
- QHash
- QMultiHash
- QSet
QMultiMap和QMultiHash支持一个键关联多个值,QHash和QMultiHash类使用散列函数进行查找,查找速度更快。
QSet
QSet是基于散列表的集合模板类,它存储数据的顺序是不定的,查找值得速度非常快,QSet内部就是用QHash实现的。
定义QSet容器和输入数据的实列代码如下:
QSet set;
set<<“dog”<<“cat”<<“tiger”;
测试一个值是否包含于这个集合,用contains()函数,示例如下:
if(!set.contains(“cat”))
…
QMap
QMap<Key,T>提供一个字典(关联数组),一个键映射到一个值。QMap存储数据是按照键的顺序,使用QHash会更快。
定义QMap<QString,int>类型变量和赋值的示例代码如下:
QMap<QString,int>map;
map[“one”]=1;
map[“two”]=2;
map[“three”]=3;
也可以使用insert()函数赋值,或者remove()移除一个键值对,示例如下:
map.insert(“four”,4);
map.remove(“two”);
要查找一个值,使用运算符【】或者value()函数,示例如下:
int num1=map[“one”];
int num2=map.value(“two”);
如果在映射表中没有找到指定的键,会返回一个缺省构造值,例如,如果值的类型是字符串,会返回一个空的字符串。
在使用value()函数查找键值时,还可以指定一个缺省的返回值,示例如下:
timeout=map.value("TIMEOUT",30);
表示如果在map里找到键“TIMEOUT”,就返回关联的值,否则返回值为30.
最后
以上就是重要酒窝为你收集整理的Qt容器类的全部内容,希望文章能够帮你解决Qt容器类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复