qt 一定要指定大小吗 数组_Qt中丰富的容器类---数组QVector、链表QLinkedList、映射表QMap、哈希表QHash...

这篇博客介绍了Qt中的四种容器类:QVector、QLinkedList、QMap和QHash。QVector提供数组功能,支持动态扩展,方便遍历。QLinkedList是链表实现,适用于迭代器访问。QMap和QHash是映射表,QMap按Key顺序存储,QHash查找效率更高。文章通过示例展示了这些容器类的使用方法和特点。
摘要由CSDN通过智能技术生成

http://www.cnblogs.com/newstart/archive/2013/05/09/3068625.html

在C++里做大型程序时,少不了要与数组、链表等数据结构打交道。就是最简单的字符串也常常让头痛万分,Qt中有QString解决了字符串的头痛,那么其他数组等有没有更简单的解决方案呢?Qt作为一款优秀的类型库,当然不会没考虑这些。Qt提供了大量的“容器类”,专门用于以某种方式存储大量内容,QString其实只是这大量的容器类的一种。

我在这里介绍:

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

QVector,是Qt对所有数组的封装,比如我们想要一个int类型数组,我们原先会写int

array[10],我们在Qt里可以写QVector array(10)

赋值的时候,我们依然可以照旧array[5]=4;想获取某一项的值也还可以array[9],也就是说,原来的特性我们还可以用。

那么QVector有什么好处呢?

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

·原先我们必须预定义好大小,而用QVector我们虽然最好也先定义好大小,但是预先不定义也可以。

我们可以使用append函数或者<

QVector

vect(2);

vect[0] =

1.0;

vect[1] =

2.0;

for (int i

= 0; i < vect.count(); ++i) {

cout << vect[i] <<

endl;

}

for (int i

= 0; i < vect.count(); ++i) {

cout << vect.at(i) <<

endl;

}

要使用索引方式設定元素,必須先配置好夠長的空間,否則會發生超出索引範圍的錯誤,使用[]運算子指定索引存取的方式是比較方便,但在某些場合下,使用at()方法會較有效率一些,這涉及Qt的隱式共享機制,稍後再作介紹。

您也可以使用QVector的append()方法來加入元素,使用remove()方法來移除元素,使用insert()方法來插入元素,例如append()的使用如下:

vect.append(3.0);vect.append(4.0);

或者是使用<

vect

<< 5.0 << 6.0;

QVector

也重載了一些其它的運算子,以及提供了一些其它可用的方法,請查詢Qt線上文件有關於QVector的介紹。QVector提供的是鄰接的

記憶體空間以存取物件,所以對於循序存取或使

QList

的子類別QStringList為Qt中應用很廣的類別,可以讓您儲存QString物件,QList的子類別QQueue則提供了佇列結構的容器管理。

以上先列出QVector、QLinkedList及QList的使用比較:

如果想要有連續鄰接的記憶體空間來存放元件,則使用QVector

如果需要真正的鏈結資料結構,並使用基於迭代器的存取方式,則使用QLinkedList

在大部份情況下,QList

可以滿足快速存取、插入、移除的需求,並可提供基於索引的存取方式。

QList

list;

l

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值