【QT基础入门】QT中的容器类:QList
- 人工智能
- 2025-08-12 20:45:02

QList简介
QList是QT中最通用的序列容器类,它可以用来存储和操作任意类型的数据。QList在内部实现为一个数组列表,它的每个元素都是一个指针,指向实际的数据对象。这样做的好处是,QList可以高效地在头部或尾部添加或删除元素,而不需要移动其他元素的内存位置。同时,QList也可以通过下标或迭代器访问元素,提供了随机访问的能力。
QList的特点是:
灵活性:QList可以存储任意类型的数据,包括基本类型,QT自带的类型,自定义的类型,甚至是其他容器类型。QList可以自动识别数据的类型,进行相应的内存管理和拷贝操作。高效性:QList可以快速地在头部或尾部添加或删除元素,因为它只需要修改指针的值,而不需要移动其他元素的内存位置。QList也可以通过下标或迭代器访问元素,提供了随机访问的能力。兼容性:QList可以和标准库的容器类进行互操作,例如std::vector,std::list,std::deque等。QList也可以和QT的其他容器类进行互操作,例如QVector,QLinkedList,QStack,QQueue等。QList还可以和C风格的数组进行互操作,例如int[],char[]等。QList的缺点是:
空间开销:QList为了提高时间效率,牺牲了一些空间效率。QList在内部使用了一个指针数组,而不是直接存储数据对象。这样做的结果是,QList占用的内存空间会比实际的数据对象多一些。缓存不友好:QList由于使用了指针数组,导致它的元素可能不是连续存储的。这样做的结果是,QList在访问元素时,可能会导致缓存失效,降低性能。QList适用的场景是:
需要频繁地在头部或尾部添加或删除元素的情况:QList在这种情况下可以提供很高的效率,而不需要移动其他元素的内存位置。需要随机访问元素的情况:QList在这种情况下可以提供很高的效率,因为它可以通过下标或迭代器访问元素。不太关心空间开销和缓存效率的情况:QList在这种情况下可以提供很高的灵活性,因为它可以存储任意类型的数据,而不需要考虑内存管理和拷贝操作。 #include <QList> #include <QVariant> #include <QString> #include <QDebug> // 创建一个空的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<QVariant> 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<QVariant> var1 = list1.toVariantList(); // 将QVariant的元素转换为QList QList<int> list7 = list6.toIntList(); QList的元素操作 append(value):在列表的末尾添加一个值或另一个列表。prepend(value):在列表的开头添加一个值。insert(i, value):在列表的指定位置i插入一个值或多个相同的值。remove(i):从列表中删除指定位置i的值。replace(i, value):用一个新值替换列表中指定位置i的值。take(i):从列表中删除指定位置i的值,并返回该值。swap(i, j):交换列表中指定位置i和j的值。move(i, j):将列表中指定位置i的值移动到指定位置。at(i):返回列表中指定位置i的值的常量引用。operator:返回列表中指定位置i的值的引用。value(i):返回列表中指定位置i的值,如果i超出范围,则返回一个默认构造的值2。first():返回列表中第一个值的引用。last():返回列表中最后一个值的引用。front():返回列表中第一个值的引用,与first()等价。back():返回列表中最后一个值的引用,与last()等价。contains(value):判断列表中是否包含指定的值。indexOf(value, from):返回列表中第一个出现的指定值的索引位置,从索引位置from开始向前搜索。lastIndexOf(value, from):返回列表中最后一个出现的指定值的索引位置,从索引位置from开始向后搜索。count(value):返回列表中指定值出现的次数。isEmpty():判断列表是否为空。clear():清空列表中的所有值。 QList的迭代器QList的迭代器类型有iterator,const_iterator,reverse_iterator,const_reverse_iterator
QList的容量和性能QList的容量相关的函数有size,capacity,reserve,squeeze,shrink_to_fit
QList的算法和工具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
【QT基础入门】QT中的容器类:QList由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【QT基础入门】QT中的容器类:QList”