在用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编程的数组
例如:
...
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类型的变量。
穿越时仍然可用