容器类
Qt的容器类比标准模板库中的容器类更轻巧安全和易于使用。并且是线程安全的,Qt的容器类的格式为:QList ,T 是一个具体的类型,可以是int、float等简单类型,也可以是Qstring、QDate等类型,但不能是QObject或任何其子类。T必须是一个可以赋值的类型。
Qt的容器类分为:
- 顺序容器
- 关联容器
顺序容器类: - QList
最常用的容器类,以数组列表的方式实现,在其前和其后添加数据非常快,QList以下标索引的方式对数据进行访问。
QList用于添加、插入、替换、移动、删除、数据项的函数有:insert()、replace()、removeAt()、move()、swap()、append()、prepend()、removeFirst()、removeLast()等。
例如:
QListlist; list<<"one"<<"two"<<"three"; QString str1=list[1]; Qstring str0=list.at(0);
QList的isEmpty()函数在数据项为空时返回true,size()函数返回数据项的个数。
- QlinkedList
是链式列表的容器类,数据项不是用连续的内存存储的,基于迭代器访问数据项,并且插入和删除数据项的 *** 作时间相同。 - QVector
提供动态数组的功能,以下标索引访问数据,与QList的函数接口几乎相同,但性能比后者更高,因为QVector的数据项是连续存储的。 - QStack
类似于堆栈的后入先出 *** 作的容器类,push()和pop()是主要的接口函数。
例:
QStackstack; stack.push(10); stack.push(20); stack.push(30); while(!stack.isEmpty()) cout< 程序会依次输出:30,20,10
- QQueue
提供类似于队列先入先出 *** 作的容器类,enqueue()和dequeue()是主要的 *** 作函数。
例:QQueuequeue; queue.enqueue(10); queue.enqueue(20); queue.enqueue(30); while(!queue.isEmpty()) cout< 程序会依次输出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提供一个字典(关联数组),一个键映射到一个值。QMap存储数据是按照键的顺序,使用QHash会更快。
定义QMap类型变量和赋值的示例代码如下:
QMapmap;
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.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)