QList是QT中最通用的序列容器类,它可以用来存储和操作任意类型的数据。QList在内部实现为一个数组列表,它的每个元素都是一个指针,指向实际的数据对象。这样做的好处是,QList可以高效地在头部或尾部添加或删除元素,而不需要移动其他元素的内存位置。同时,QList也可以通过下标或迭代器访问元素,提供了随机访问的能力。
QList的特点是:
QList的缺点是:
QList适用的场景是:
- #include
- #include
- #include
- #include
-
-
- // 创建一个空的QList
- QList<int> list1;
- // 创建一个包含5个元素的QList
- QList<int> list2(5);
- // 创建一个包含3个元素的QList,并初始化为10
- QList<int> list3(3, 10);
- // 创建一个包含4个元素的QList,并使用列表初始化
- QList<int> list4{1, 2, 3, 4};
- // 创建一个包含3个元素的QList,并使用数组初始化
- int arr[] = {5, 6, 7};
- QList<int> list5 = QList<int>::fromArray(arr, 3);
- // 创建一个包含不同类型的元素的QList,并使用QVariant初始化
- QList
list6; - list6 << 1 << 3.14 << "Hello" << true;
-
- // 在QList的头部添加元素
- list1.prepend(0);
- // 在QList的尾部添加元素
- list1.append(9);
- // 在QList的中间插入元素
- list1.insert(1, 1);
- list1.insert(8, 8);
-
- // 删除QList的头部元素
- list1.removeFirst();
- // 删除QList的尾部元素
- list1.removeLast();
- // 删除QList的中间元素
- list1.removeAt(1);
- list1.removeAt(6);
-
- // 通过下标访问QList的元素
- qDebug() << "list1[0] =" << list1[0];
- qDebug() << "list1[1] =" << list1[1];
- // 通过at函数访问QList的元素
- qDebug() << "list1.at(0) =" << list1.at(0);
- qDebug() << "list1.at(1) =" << list1.at(1);
- // 通过value函数访问QList的元素,如果下标越界,返回默认值
- qDebug() << "list1.value(0) =" << list1.value(0);
- qDebug() << "list1.value(10) =" << list1.value(10);
- qDebug() << "list1.value(10, -1) =" << list1.value(10, -1);
-
- // 通过迭代器遍历QList的元素
- for (QList<int>::iterator it = list1.begin(); it != list1.end(); ++it)
- {
- qDebug() << *it;
- }
- // 通过常量迭代器遍历QList的元素
- for (QList<int>::const_iterator it = list1.constBegin(); it != list1.constEnd(); ++it)
- {
- qDebug() << *it;
- }
- // 通过反向迭代器遍历QList的元素
- for (QList<int>::reverse_iterator it = list1.rbegin(); it != list1.rend(); ++it)
- {
- qDebug() << *it;
- }
- // 通过常量反向迭代器遍历QList的元素
- for (QList<int>::const_reverse_iterator it = list1.crbegin(); it != list1.crend(); ++it)
- {
- qDebug() << *it;
- }
- // 通过范围for循环遍历QList的元素
- for (int x : list1)
- {
- qDebug() << x;
- }
-
- // 对QList的元素进行排序
- list1.sort();
- // 对QList的元素进行倒序
- list1.reverse();
- // 对QList的元素进行随机打乱
- list1.shuffle();
-
- // 查找QList中是否包含某个元素
- qDebug() << "list1.contains(3) =" << list1.contains(3);
- // 查找QList中某个元素的下标
- qDebug() << "list1.indexOf(3) =" << list1.indexOf(3);
- // 查找QList中某个元素的最后一个下标
- qDebug() << "list1.lastIndexOf(3) =" << list1.lastIndexOf(3);
- // 查找QList中某个元素的出现次数
- qDebug() << "list1.count(3) =" << list1.count(3);
-
- // 获取QList的元素个数
- qDebug() << "list1.size() =" << list1.size();
- // 获取QList的容量
- qDebug() << "list1.capacity() =" << list1.capacity();
- // 判断QList是否为空
- qDebug() << "list1.isEmpty() =" << list1.isEmpty();
- // 清空QList
- list1.clear();
-
- // 将QList转换为数组
- int *arr1 = list1.toArray();
- // 将QList转换为QVector
- QVector<int> vec1 = list1.toVector();
- // 将QList转换为QLinkedList
- QLinkedList<int> link1 = list1.toLinkedList();
- // 将QList转换为QSet
- QSet<int> set1 = list1.toSet();
-
- // 将QList的元素转换为QVariant
- QList
var1 = list1.toVariantList(); - // 将QVariant的元素转换为QList
- QList<int> list7 = list6.toIntList();
QList的迭代器类型有iterator,const_iterator,reverse_iterator,const_reverse_iterator
QList的容量相关的函数有size,capacity,reserve,squeeze,shrink_to_fit
QList的一些常用的算法和工具函数有sort,qSort,qStableSort,qLowerBound,qUpperBound,qBinaryFind,qCount,qDeleteAll,qEqual,qFill,qFind,qFindEnd,qFindFirst,qFindLast,qGreater,qLess,qMax,qMin,qCopy,qCopyBackward,qMove,qMoveBackward,qSwap,qSwapRanges