数组、链表、哈希...Qt 中丰富的容器类

 2024-03-01 03:02:58  阅读 0

在用C++编写大型程序时,不可避免地要处理数组、链表等数据结构。 即使是最简单的字符串也常常会引起头痛。 Qt解决了字符串这个令人头疼的问题,但是对于其他数组等有没有更简单的解决方案呢?

Qt作为一个优秀的类型库,当然不会忽略这些。 Qt 提供了大量的“容器类”,旨在以某种方式存储大量内容。 事实上,它只是这些大量的容器类之一。

我在这里介绍一下:

(数组)、(链表)、QMap(映射表)、QHash(哈希表)

,是Qt对所有数组的封装。 比如我们想要一个int类型的数组,本来我们会写int array[10],但是在Qt中我们可以写array(10)。

赋值时,我们仍然可以使用array[5]=4; 如果我们想获取某一项的值,也可以使用array[9]。 也就是说,我们仍然可以使用原来的特征。

那么有什么好处呢?

·我们可以使用count函数来知道数组中有多少个元素,方便遍历

·最初,我们必须预先定义尺寸。 虽然最好先定义尺寸,但我们也可以不提前定义。

我们可以使用函数或>,只是不要把自己搞砸了......

在数组末尾插入元素效率较高,但在中间插入元素速度较慢。 QList到处插入的速度都是一样的,但是访问一个元素不方便,所以我个人更喜欢另一种“链表”类型,QList与其说是链表,不如说是指针数组。 QList 的用法对于所有数组都是相同的。 然而,你不需要了解太多它的原理。 你只需要知道用法几乎是一样的。 有时如果数组中的每个元素都很大,建议使用QList代替。

QMap是一个有趣的东西,但是在暴露的底层C++中实现它是相当麻烦的。 数组建立了从0开始的连续数字与数据的对应关系,QMap的作用就是让任意一种数据类型对应另一种数据类型。 声明如下:QMap 变量名。 它的性能有点类似于PHP编程的数组

例如:

#include...void someFunction(){    QMap map;    map["Hello"]="World";    QMap<int,double> i2d;    i2d[5231]=32.4213;    //遍历比较特殊,得这样:    QMapIterator i(map);    while(i.hasNext())        doSomething(i.next());}...

如果我们想使用 [] 运算符访问一个项目,但该项目不存在,它将自动创建。 如果我们不想创建空白项,可以使用value函数,如i2d.value(123,-0.1); 这里如果 i2d[123] 存在,则返回该项,否则返回默认值 -0.1。 这个默认值不需要写,这样Qt系统就会使用Qt默认的默认值...可以使用take函数(一个容易混淆的函数名)来删除一项。

QHash哈希表与QMap几乎相同,但效率更高。 然而,使用QHash要求用作索引的类型可以使用==进行比较,并且有相应的函数qHash。 Qt自带的一些如各种整数、指针、、QChar等都可以直接作为QHash的索引。 由于QHash效率更高,因此建议尽可能使用QHash。

QMap和QHash都是一对一或多对一映射,您可以使用QMap和QHash创建一对多映射。

例如地图;

map[3]="Hello";map.insert(3,"World");

当你调用map[3]时,你会得到一个QList类型的变量。

穿越时仍然可用

用数组实现insert函数_数组instanceof_使用数组作为函数参数

标签: 数组 容器 函数

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码