Qt中的容器类

QList<T>是最常用的容器类,他存储给定类型的数据类型T的一列直,,可以在列表中追加QList::append();and QList::preppend();and QList::insert()..
他所维护的是一个一指针数组,该数组存储的指针指向存储列表项的直,因此可以采用下标进行快速访问。

QList<QString> list;
string str="i am turing ,welcome to Qt.";
list<<str;
qDebug()<<list(0);

其中的QStringList 就是从这边继承下来的

QLinkedList<T>是一个链式列表,它以非连续的内存快保存数据,所以他是不能使用下标进行访问的,,也就是说他更适合插入的操作,时间是在O(1).

QVector<T>这个方式是在相邻的内存位置上保存数据的,也就是以数组的方式进行存储的,所以对起进行插入的操作的时候是一项很耗时间的,因为要有大量的数据进行一动。。当然也是可以通过下标对其进行访问的。

Qt的容器类为遍历其中的操作提供了两种方法:
1.java风格的迭代器,
2。STL风格的。

下面介绍STL风格
QList<T> QList<T>::const_iterator QList<T>::iterator///中间那个是只读的,最后是可读写的
QLinkedList<T> QLinkedList<T>::const_iterator QLinkedList<T>::iterator
下面那个同理
这个风格的迭代器是建立在指针的基础上的,++指向下一个,*返回指向的项。

下面再以QList来简单介绍他们的迭代器具体的API接口
QList<T>::begin()///返回指向第一个列表项的迭代器,这个是有效的
QList<T>::end()//返回的是容器最后列表项之后的下一个,也就是标记的是无效的那个,

#include <QDebug>

int main(int argc, char *argv[])
{
QList<int> list;
for(int j=0; j<10; j++)
list.insert(list.end(), j);//表示在列表的最后插入直j

QList<int>::iterator i;

for(i=list.begin(); i!=list.end(); ++i)
{
qDebug() << (*i);
*i = (*i) * 10;
}

QList<int>::const_iterator ci;

for(ci=list.constBegin(); ci!=list.constEnd(); ++ci)
qDebug() << *ci;

return 0;

}

### Qt 容器类概述 Qt 提供了一系列高效的容器类来存储和管理数据集合。这些容器类被设计成模板化,可以容纳任何类型的对象[^1]。 #### QList 类 `QList<T>` 是一个顺序容器,提供了快速的索引操作以及相对快速的追加操作。对于大多数应用场景来说,这是最常用的列表实现方式之一。它内部实现了数组结构,在访问随机位置上的元素时性能较好。 ```cpp // 创建并初始化一个整数型的QList QList<int> numbers; numbers << 1 << 2 << 3; // 访问第一个元素 int firstNumber = numbers.first(); // 追加新元素到末尾 numbers.append(4); ``` #### QLinkedList 类 `QLinkedList<T>` 实现了一个双向链表的数据结构,适合频繁地在中间插入或删除节点的情况。相比于 `QList`, 对于这类操作效率更高;但在通过下标查找特定项的速度上会慢一些。 ```cpp // 初始化字符串类型的QLinkedList QLinkedList<QString> names; names.push_back("Alice"); names.prepend("Bob"); // 遍历整个链接列表打印所有名字 for (auto it = names.begin(); it != names.end(); ++it){ qDebug() << *it; } ``` #### 容器对比 当选择使用哪种容器时,应该考虑具体的应用场景需求: - 如果程序经常执行随机存取或者只需要在一端添加/移除项目,则应优先选用 `QList`. - 当涉及到大量的中部插入与删除动作时,推荐采用 `QLinkedList`. 此外,两种容器都支持迭代器遍历、STL风格算法接口等功能特性.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值