本页内容

QList Class

template <typename T> class QList

QList 类是一个提供动态数组的模板类。更多内容...

头文件: #include <QList>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
被继承类:
16 种类型

QBluetoothServiceInfo::Alternative、QBluetoothServiceInfo::Sequence 、QByteArrayList 、QItemSelection 、QMqttUserProperties 、QNdefMessage 、QPolygon 、QPolygonF 、QQueue 、QSignalSpy 、QStack 、QStringList 、QTestEventList 、QVector 、QVulkanInfoVector ,以及QXmlStreamAttributes

注意:该类中的所有函数都是可重入的。

公共类型

公共函数

QList()
QList(qsizetypesize)
QList(std::initializer_list<T>args)
QList(InputIteratorfirst, InputIteratorlast)
QList(qsizetypesize, QList<T>::parameter_typevalue)
(since 6.8) QList(qsizetypesize, Qt::Initialization)
QList(const QList<T>&other)
QList(QList<T>&&other)
~QList()
void append(QList<T>::parameter_typevalue)
(since 6.0) void append(QList<T>&&value)
void append(QList<T>::rvalue_refvalue)
void append(const QList<T>&value)
(since 6.6) QList<T> &assign(std::initializer_list<T>l)
(since 6.6) QList<T> &assign(InputIteratorfirst, InputIteratorlast)
(since 6.6) QList<T> &assign(qsizetypen, QList<T>::parameter_typet)
QList<T>::const_reference at(qsizetypei) const
QList<T>::reference back()
QList<T>::const_reference back() const
QList<T>::iterator begin()
QList<T>::const_iterator begin() const
qsizetype capacity() const
QList<T>::const_iterator cbegin() const
QList<T>::const_iterator cend() const
void clear()
QList<T>::const_iterator constBegin() const
QList<T>::const_pointer constData() const
QList<T>::const_iterator constEnd() const
const T &constFirst() const
const T &constLast() const
bool contains(const AT&value) const
qsizetype count(const AT&value) const
qsizetype count() const
QList<T>::const_reverse_iterator crbegin() const
QList<T>::const_reverse_iterator crend() const
QList<T>::pointer data()
QList<T>::const_pointer data() const
void detach()
QList<T>::迭代器 emplace(qsizetypei, Args &&...args)
QList<T>::iterator emplace(QList<T>::const_iteratorbefore, Args &&...args)
QList<T>::reference emplaceBack(Args &&...args)
QList<T>::reference emplace_back(Args &&...args)
bool empty() const
QList<T>::iterator end()
QList<T>::const_iterator end() const
bool endsWith(QList<T>::parameter_typevalue) const
QList<T>::iterator erase(QList<T>::const_iteratorpos)
QList<T>::iterator erase(QList<T>::const_iteratorbegin, QList<T>::const_iteratorend)
QList<T> &fill(QList<T>::parameter_typevalue, qsizetypesize= -1)
T &first()
(since 6.0) QList<T> first(qsizetypen) const
const T &first() const
QList<T>::reference front()
QList<T>::const_reference front() const
qsizetype indexOf(const AT&value, qsizetypefrom= 0) const
QList<T>::iterator insert(qsizetypei, QList<T>::parameter_typevalue)
QList<T>::iterator insert(qsizetypei, QList<T>::rvalue_refvalue)
QList<T>::iterator insert(QList<T>::const_iteratorbefore, qsizetypecount, QList<T>::parameter_typevalue)
QList<T>::iterator insert(QList<T>::const_iteratorbefore, QList<T>::parameter_typevalue)
QList<T>::iterator insert(QList<T>::const_iteratorbefore, QList<T>::rvalue_refvalue)
QList<T>::iterator insert(qsizetypei, qsizetypecount, QList<T>::parameter_typevalue)
bool isEmpty() const
T &last()
(since 6.0) QList<T> last(qsizetypen) const
const T &last() const
qsizetype lastIndexOf(const AT&value, qsizetypefrom= -1) const
qsizetype length() const
(since 6.8) qsizetype max_size() const
QList<T> mid(qsizetypepos, qsizetypelength= -1) const
void move(qsizetypefrom, qsizetypeto)
void pop_back()
void pop_front()
void prepend(QList<T>::parameter_typevalue)
void prepend(QList<T>::rvalue_refvalue)
void push_back(QList<T>::parameter_typevalue)
void push_back(QList<T>::rvalue_refvalue)
void push_front(QList<T>::parameter_typevalue)
void push_front(QList<T>::rvalue_refvalue)
QList<T>::reverse_iterator rbegin()
QList<T>::const_reverse_iterator rbegin() const
void remove(qsizetypei, qsizetypen= 1)
qsizetype removeAll(const AT&t)
void removeAt(qsizetypei)
void removeFirst()
(since 6.1) qsizetype removeIf(谓词pred)
void removeLast()
bool removeOne(const AT&t)
QList<T>::reverse_iterator rend()
QList<T>::const_reverse_iterator rend() const
void replace(qsizetypei, QList<T>::parameter_typevalue)
void replace(qsizetypei, QList<T>::rvalue_refvalue)
void reserve(qsizetypesize)
(since 6.0) void resize(qsizetypesize)
(since 6.0) void resize(qsizetypesize, QList<T>::parameter_typec)
(since 6.8) void resizeForOverwrite(qsizetypesize)
void shrink_to_fit()
qsizetype size() const
(since 6.0) QList<T> sliced(qsizetypepos, qsizetypen) const
(since 6.0) QList<T> sliced(qsizetypepos) const
void squeeze()
bool startsWith(QList<T>::parameter_typevalue) const
void swap(QList<T>&other)
void swapItemsAt(qsizetypei, qsizetypej)
T takeAt(qsizetypei)
QList<T>::value_type takeFirst()
QList<T>::value_type takeLast()
T value(qsizetypei) const
T value(qsizetypei, QList<T>::parameter_typedefaultValue) const
bool operator!=(const QList<T>&other) const
QList<T> operator+(QList<T>&&other) &&
QList<T> operator+(const QList<T>&other) &&
QList<T> operator+(QList<T>&&other) const &
QList<T> operator+(const QList<T>&other) const &
QList<T> &operator+=(const QList<T>&other)
(since 6.0) QList<T> &operator+=(QList<T>&&other)
QList<T> &operator+=(QList<T>::parameter_typevalue)
QList<T> &operator+=(QList<T>::rvalue_ref值)
bool operator<(const QList<T>&other) const
QList<T> &operator<<(QList<T>::parameter_typevalue)
QList<T> &operator<<(const QList<T>&other)
(since 6.0) QList<T> &operator<<(QList<T> &&other)
QList<T> &operator<<(QList<T>::rvalue_refvalue)
bool operator<=(const QList<T>&other) const
QList<T> &operator=(QList<T>&&other)
QList<T> &operator=(const QList<T>&other)
QList<T> &operator=(std::initializer_list<T>args)
bool operator==(const QList<T>&other) const
bool operator>(const QList<T>&other) const
bool operator>=(const QList<T>&other) const
QList<T>::reference operator[](qsizetypei)
QList<T>::const_reference operator[](qsizetypei) const

静态公共成员

(since 6.8) qsizetype maxSize()
(since 6.1) qsizetype erase(QList<T> &list, const AT &t)
(since 6.1) qsizetype erase_if(QList<T> &list, Predicate pred)
size_t qHash(const QList<T> &key, size_t seed = 0)
QDataStream &operator<<(QDataStream &out, const QList<T> &list)
(since 6.9) auto operator<=>(const QList<T> &lhs, const QList<T> &rhs)
QDataStream &operator>>(QDataStream &in, QList<T> &list)

详细说明

QList<T> 是 Qt 的泛型容器类之一,其中T 指定了列表中存储的元素类型。它将项目存储在相邻的内存位置,并提供基于索引的快速访问。QVector<T> 在 Qt 5 中曾是一个不同的类,但现在已成为 QList 的简单别名。

QList<T> 和QVarLengthArray<T> 提供类似的 API 和功能。它们通常可以互换使用,但会带来性能上的影响。以下是使用场景的概述:

  • QList 应作为您的默认首选。
  • QVarLengthArray 它提供了一个在栈上预留空间的数组,但在需要时可动态扩展到堆上。它适合用于通常较小且生命周期较短的容器。
  • 若需要真正的链表(保证在列表中间插入时时间复杂度为常数,且使用迭代器而非索引访问元素),请使用 std::list。

注意:QList 和QVarLengthArray 都保证了与 C 语言兼容的数组布局。

注意: 在 Qt 5 中,QList 并不总是具有与 C 兼容的数组布局,我们通常建议改用QVector 以获得更可预测的性能。但在 Qt 6 中情况已不同,这两个类现在共享相同的实现,可以互换使用。

以下是一个存储整数的 QList 示例,以及一个存储QString 值的 QList 示例:

QList<int> integerList;
QList<QString> stringList;

QList 将其项目存储在连续内存区域的数组中。通常,列表是在指定初始大小的条件下创建的。例如,以下代码构建了一个包含 200 个元素的 QList:

QList<QString> list(200);

这些元素会自动使用默认构造函数的值进行初始化。若要使用其他值初始化列表,请将该值作为构造函数的第二个参数传入:

QList<QString> list(200, "Pass");

你也可以随时调用 `fill()` 方法向列表中填充某个值。

QList 使用基于 0 的索引,与 C++ 数组一样。要访问特定索引位置的项,可以使用 operator[]()。对于非 const 列表,operator[]() 返回该项的引用,该引用可在赋值语句的左侧使用:

if (list[0] == "Liz")
    list[0] = "Elizabeth";

对于只读访问,另一种语法是使用at():

for (qsizetype i = 0; i < list.size(); ++i) {
    if (list.at(i) == "Alfonso")
        cout << "Found Alfonso at position " << i << endl;
}

at() 可能比 operator[]() 更快,因为它绝不会引发深度复制。

访问 QList 中存储数据的另一种方法是调用data()。该函数返回指向列表中第一个元素的指针。您可以使用该指针直接访问和修改列表中存储的元素。当需要将 QList 传递给接受普通 C++ 数组的函数时,该指针也很有用。

若要查找列表中某个特定值的所有出现位置,请使用 `indexOf()` 或 `lastIndexOf()`。前者从给定索引位置开始向前搜索,后者则向后搜索。若找到匹配项,两者均返回该项的索引;否则返回 -1。例如:

qsizetype i = list.indexOf("Harumi");
if (i != -1)
    cout << "First occurrence of Harumi is at position " << i << endl;

若仅需检查列表中是否包含某个特定值,请使用contains()。若需统计列表中某个特定值的出现次数,请使用count()。

QList 提供了以下用于添加、移动和删除项的基本函数:insert()、replace()、remove()、prepend()、append()。除了append()、prepend() 和replace() 之外,对于大型列表,这些函数的执行速度可能较慢(线性时间),因为它们需要将列表中的许多项在内存中向后移动一个位置。 若您需要一个支持在列表中间快速插入/删除的容器类,请改用 std::list。

与普通的 C++ 数组不同,QList 可以通过调用resize() 随时调整大小。如果新大小大于旧大小,QList 可能需要重新分配整个列表的内存。QList 会预先分配最多两倍于实际数据所需的内存,以此尽量减少重新分配的次数。

如果您正在逐步构建 QList,并且预先知道它将包含的大致元素数量,可以调用reserve(),要求 QList 预分配一定量的内存。您还可以调用capacity() 来查询 QList 实际分配了多少内存。

请注意,由于隐式共享,使用非 const 运算符和函数可能会导致 QList 对数据进行深度复制。

QList 的值类型必须是可赋值的数据类型。 这涵盖了大多数常用数据类型,但编译器不允许您将QWidget 作为值存储;相反,应存储QWidget *。部分函数有额外要求;例如,indexOf()和lastIndexOf()要求值类型支持operator==() 。这些要求在每个函数的文档中都有说明。

有关遍历项的信息,请参阅“遍历容器”。若要将 QList 与<algorithm> 头文件中的函数(如std::sort() 、std::reverse() 和std::count_if() )配合使用,请参阅“Qt 容器与 std 算法”。若要将 QList 与 Qt 自身的泛型算法(如qJoin() 和qDeleteAll())配合使用,请参阅“<QtAlgorithms> ”。

除了 QList 之外,Qt 还提供了QVarLengthArray ,这是一个功能极简但经过速度优化的低级类。

有关使用 Qt 容器的更多信息

有关 Qt 容器之间以及与 STL 容器之间的详细比较讨论,请参阅《了解 Qt 容器》。

最大大小和内存不足情况

QList 的最大大小取决于体系结构。大多数 64 位系统可以分配超过 2 GB 的内存,典型限制为 2^63 字节。实际值还取决于管理数据块所需的开销。 因此,在 32 位平台上,其最大大小预计为 2 GB 减去开销;在 64 位平台上,则为 2^63 字节减去开销。QList 中可存储的元素数量等于该最大大小除以单个存储元素的大小。

当内存分配失败时,QList会使用Q_CHECK_PTR 宏;如果应用程序在编译时启用了异常支持,该宏将抛出std::bad_alloc 异常。如果禁用了异常,则内存不足将导致未定义行为。

请注意,操作系统可能会对占用大量已分配内存的应用程序施加进一步的限制,尤其是针对大型、连续的内存块。此类考虑、相关行为的配置或任何缓解措施均超出 Qt API 的范围。

成员类型文档

[alias] QList::ConstIterator

QList::const_iterator 的 Qt 风格同义词。

[alias] QList::Iterator

QList::iterator 的 Qt 风格同义词。

[alias] QList::const_pointer

为确保与 STL 兼容而提供。

[alias] QList::const_reference

为确保与 STL 兼容而提供。

[alias] QList::const_reverse_iterator

QList::const_reverse_iterator 类型别名(typedef)为 `QList` 提供了一个 STL 风格的 const 反向迭代器。

警告: 隐式共享容器上的迭代器其 工作方式与 STL 迭代器并不完全一致。应避免在迭代器处于活动状态时复制该容器。有关详细信息,请参阅《隐式共享迭代器问题》。

警告: 当 `QList ` 被修改时,迭代器 将失效。请默认认为所有迭代器均已失效。此规则的例外情况已在文档中明确说明。

另请参阅 QList::rbegin()、QList::rend()、QList::reverse_iterator 以及QList::const_iterator 。

[alias] QList::difference_type

为确保与 STL 兼容而提供。

[alias] QList::parameter_type

[alias] QList::pointer

为兼容 STL 而提供。

[alias] QList::reference

为确保与 STL 兼容而提供。

[alias] QList::reverse_iterator

QList::reverse_iterator 类型别名(typedef)为 `QList` 提供了一个 STL 风格的非 const 反向迭代器。

警告: 隐式共享容器上的迭代器其行为 与 STL 迭代器并不完全一致。应避免在迭代器处于活动状态时复制该容器。有关详细信息,请参阅“隐式共享迭代器问题”。

警告: 当 `QList ` 被修改时,迭代器 将失效。请默认认为所有迭代器均已失效。此规则的例外情况已在文档中明确说明。

另请参阅 QList::rbegin()、QList::rend()、QList::const_reverse_iterator 以及QList::iterator 。

[alias] QList::rvalue_ref

[alias] QList::size_type

为确保与 STL 兼容而提供。

[alias] QList::value_type

为兼容 STL 而提供。

成员函数文档

[constexpr noexcept default] QList::QList()

构建一个空列表。

另请参阅 ` resize()`。

[explicit] QList::QList(qsizetype size)

构建一个初始大小为size 个元素的列表。

这些元素将初始化为默认构造的值。

另请参阅 resize()。

QList::QList(std::initializer_list<T> args)

根据args 中给定的std::initializer_list构建一个列表。

template <typename InputIterator, QList<T>::if_input_iterator<InputIterator> = true> QList::QList(InputIterator first, InputIterator last)

构建一个包含迭代器范围 [first,last) 内内容的列表。

InputIterator 的值类型必须可转换为T 。

约束

仅当InputIterator 满足LegacyInputIterator 的要求时,才参与重载解析。

QList::QList(qsizetype size, QList<T>::parameter_type value)

构建一个初始大小为size 个元素的列表。每个元素的初始值均为value 。

另请参阅 resize() 和fill()。

[since 6.8] QList::QList(qsizetype size, Qt::Initialization)

构建一个初始大小为size 个元素的列表。

QList 将尝试不初始化这些元素。

具体来说:

  • 如果T 具有一个接受Qt::Uninitialized 作为参数的构造函数,则将使用该构造函数来初始化元素;
  • 否则,每个元素将通过默认构造函数进行初始化。对于可简单构造的类型(如int 、float 等),这相当于不初始化它们。

该函数于 Qt 6.8 中引入。

另请参见 resizeForOverwrite()。

[implicit] QList::QList(const QList<T> &other)

创建other 的副本。

此操作耗时为常数时间,因为 QList 是隐式共享的。这使得从函数中返回 QList 非常快速。如果共享的实例被修改,则会进行复制(写时复制),这需要线性时间。

另请参阅 operator=()。

[implicit] QList::QList(QList<T> &&other)

通过“move”操作构造一个 QList 实例,使其指向与other 所指向的同一对象。

[implicit] QList::~QList()

销毁该列表。

void QList::append(QList<T>::parameter_type value)

将value 插入列表末尾。

示例:

QList<QString> list;
list.append("one");
list.append("two");
QString three = "three";
list.append(three);
// list: ["one", "two", "three"]
// three: "three"

这相当于调用 resize(size() + 1),并将value 赋值给列表中的新末尾元素。

此操作相对较快,因为QList 通常会预留比实际所需更多的内存,因此可以在无需每次重新分配整个列表的情况下扩展。

另请参阅 operator<<()、prepend() 和insert()。

[since 6.0] void QList::append(QList<T> &&value)

将value 列表中的项目移动到该列表的末尾。

这是一个重载函数。

该函数在 Qt 6.0 中引入。

另请参阅 operator<<() 和operator+=()。

void QList::append(QList<T>::rvalue_ref value)

示例:

QList<QString> list;
list.append("one");
list.append("two");
QString three = "three";
list.append(std::move(three));
// list: ["one", "two", "three"]
// three: ""

这是一个重载函数。

void QList::append(const QList<T> &value)

将value 列表中的项目追加到此列表中。

这是一个重载函数。

另请参阅 operator<<() 和operator+=()。

[since 6.6] QList<T> &QList::assign(std::initializer_list<T> l)

将此列表的内容替换为l 中元素的副本。

该列表的大小将等于l 中的元素个数。

只有当l 中的元素数量超过该列表的容量,或者该列表为共享列表时,此函数才会分配内存。

该函数于 Qt 6.6 中引入。

[since 6.6] template <typename InputIterator, QList<T>::if_input_iterator<InputIterator> = true> QList<T> &QList::assign(InputIterator first, InputIterator last)

将此列表的内容替换为迭代器范围 [first,last) 中元素的副本。

该列表的大小将等于范围 [first,last) 中的元素个数。

只有当范围中的元素数量超过该列表的容量,或者该列表是共享的时,此函数才会分配内存。

注意: 如果任一参数是指向 *this 的迭代器,则行为 未定义。

约束

只有当InputIterator 满足LegacyInputIterator 的要求时,才参与重载解析。

该函数在 Qt 6.6 中引入。

[since 6.6] QList<T> &QList::assign(qsizetype n, QList<T>::parameter_type t)

将此列表的内容替换为n 个t 的副本。

该列表的大小将等于n 。

只有当n 超过列表的容量,或者该列表是共享的,此函数才会分配内存。

该函数自 Qt 6.6 起引入。

[noexcept] QList<T>::const_reference QList::at(qsizetype i) const

返回列表中索引位置为i 的项目。

i i 必须是列表中的有效索引位置(即 0 <= < ())。size

另请参阅 value() 和operator[]()。

QList<T>::reference QList::back()

提供此函数是为了兼容 STL。它等同于 `last()`。

[noexcept] QList<T>::const_reference QList::back() const

这是一个重载函数。

QList<T>::iterator QList::begin()

返回一个指向列表中第一个元素的STL 风格迭代器。

警告: 当断开连接或修改 `QList ` 时,返回的迭代器将失效。

另请参阅 constBegin() 和end()。

[noexcept] QList<T>::const_iterator QList::begin() const

这是一个重载函数。

qsizetype QList::capacity() const

返回列表在不强制重新分配内存的情况下所能存储的最大项目数。

此函数的唯一目的是提供一种精细调整QList 内存使用情况的手段。通常情况下,您几乎不需要调用此函数。若要了解列表中包含多少个项目,请调用size()。

注意: 静态分配的列表 会报告容量为 0,即使它并非空列表 。

警告: 在已分配的内存块中,空闲空间的位置是未定义的。换句话说,不应假设空闲内存总是位于列表末尾。您可以调用reserve() 来确保列表末尾有足够的空间。

另请参阅 reserve() 和squeeze()。

[noexcept] QList<T>::const_iterator QList::cbegin() const

返回一个指向列表中第一个元素的常量STL 风格迭代器。

警告: 当脱离列表或修改 `QList ` 时,返回的迭代器将失效。

另请参阅 begin() 和cend()。

[noexcept] QList<T>::const_iterator QList::cend() const

返回一个指向列表中最后一个元素之后位置的常量STL 风格迭代器。

警告: 当该迭代器与列表脱离,或QList 被修改时,返回的迭代器 将失效。

另请参阅 cbegin() 和end()。

void QList::clear()

从列表中移除所有元素。

如果该列表未共享,则会保留capacity()。请使用squeeze()来释放多余的容量。

注意:在 Qt 5.7 之前(针对 `QVector()`)和 6.0 之前(针对 `QList()`)的版本中,此函数会释放列表占用的内存,而非保留其容量。

另请参阅 resize() 和squeeze()。

[noexcept] QList<T>::const_iterator QList::constBegin() const

返回一个指向列表中第一个元素的常量STL 风格迭代器。

警告: 当脱离列表或修改QList 时,返回的迭代器将失效。

另请参阅 begin() 和constEnd()。

[noexcept] QList<T>::const_pointer QList::constData() const

返回一个指向列表中存储数据的常量指针。该指针可用于访问列表中的项目。

警告: 当脱离列表或修改QList 时,该 指针将失效。

该函数主要用于将列表传递给接受普通 C++ 数组的函数。

另请参阅 data() 和operator[]()。

[noexcept] QList<T>::const_iterator QList::constEnd() const

返回一个指向列表中最后一个元素之后位置的常量STL 风格迭代器。

警告: 当该迭代器与列表脱离,或QList 被修改时,返回的迭代器 将失效。

另请参阅 constBegin() 和end()。

[noexcept] const T &QList::constFirst() const

返回列表中第一个元素的常量引用。该函数假设列表不为空。

另请参阅 constLast()、isEmpty() 和first()。

[noexcept] const T &QList::constLast() const

返回列表中最后一个元素的常量引用。该函数假设列表不为空。

另请参阅 constFirst()、isEmpty()、以及last()。

[noexcept] template <typename AT> bool QList::contains(const AT &value) const

如果列表中包含value ,则返回true ;否则返回false 。

此函数要求值类型实现了operator==() 接口。

另请参阅 indexOf() 和count()。

[noexcept] template <typename AT = T> qsizetype QList::count(const AT &value) const

返回列表中value 的出现次数。

此函数要求该值类型实现了 `operator==()` 接口。

另请参阅 contains() 和indexOf()。

[constexpr noexcept] qsizetype QList::count() const

与size()相同。

这是一个重载函数。

[noexcept] QList<T>::const_reverse_iterator QList::crbegin() const

返回一个指向列表中第一个元素的常量STL 风格反向迭代器,顺序为反向。

警告: 当脱离列表或修改QList 时,返回的迭代器将失效。

另请参阅 begin()、rbegin() 和rend()。

[noexcept] QList<T>::const_reverse_iterator QList::crend() const

返回一个常量STL 风格的反向迭代器,该迭代器指向列表中最后一个元素之后的下一位置,且按反向顺序排列。

警告: 当脱离列表或修改QList 时,返回的迭代器将失效。

另请参阅 end()、rend() 和rbegin()。

QList<T>::pointer QList::data()

返回指向列表中存储的数据的指针。该指针可用于访问和修改列表中的项目。

示例:

QList<int> list(10);
int *data = list.data();
for (qsizetype i = 0; i < 10; ++i)
    data[i] = 2 * i;

警告: 当与列表脱离或QList 发生修改时,该 指针将失效。

该函数主要用于将列表传递给接受普通 C++ 数组的函数。

另请参阅 constData() 和operator[]()。

[noexcept] QList<T>::const_pointer QList::data() const

这是一个重载函数。

void QList::detach()

确保该QList 的数据不再与其他实例共享。

template <typename... Args> QList<T>::iterator QList::emplace(qsizetype i, Args &&... args)

通过在位置i 处插入一个新元素来扩展容器。该新元素使用args 作为构造参数,在原地进行构造。

返回指向新元素的迭代器。

示例:

QList<QString> list{"a", "ccc"};
list.emplace(1, 2, 'b');
// list: ["a", "bb", "ccc"]

注意:保证 该元素将就地创建在容器开头,但之后可能会被复制或移动到正确的位置。

另请参阅 emplaceBack 。

template <typename... Args> QList<T>::iterator QList::emplace(QList<T>::const_iterator before, Args &&... args)

在迭代器before 所指向的项之前创建一个新元素。该新元素采用就地构建方式,并以args 作为其构造的参数。

返回指向该新元素的迭代器。

这是一个重载函数。

template <typename... Args> QList<T>::reference QList::emplaceBack(Args &&... args)

template <typename... Args> QList<T>::reference QList::emplace_back(Args &&... args)

在容器的末尾添加一个新元素。该新元素使用args 作为构造参数,在原地进行构造。

返回新元素的引用。

示例:

QList<QString>list{"one", "two"};
list.emplaceBack(3, 'a');
qDebug() << list;
// 列表:["one", "two", "aaa"]

也可以通过返回的引用来访问新创建的对象:

QList<QString> list;
auto &ref = list.emplaceBack();
ref = "one";
// list: ["one"]

这与 list.emplace(list.size(),args) 的效果相同。

另请参阅 emplace 。

[noexcept] bool QList::empty() const

提供此函数是为了兼容 STL。它等同于 `isEmpty()`,如果列表为空,则返回 `true `;否则返回 `false`。

QList<T>::iterator QList::end()

返回一个STL 风格的迭代器,该迭代器指向列表中最后一个元素的下一位置。

警告: 当脱离列表或修改QList 时,返回的迭代器将失效。

另请参阅 ` begin()` 和 `constEnd()`。

[noexcept] QList<T>::const_iterator QList::end() const

这是一个重载函数。

bool QList::endsWith(QList<T>::parameter_type value) const

如果该列表不为空且其最后一个元素等于value ,则返回true ;否则返回false 。

另请参阅 isEmpty() 和last()。

QList<T>::iterator QList::erase(QList<T>::const_iterator pos)

从列表中移除由迭代器pos 所指向的元素,并返回指向列表中下一个元素的迭代器(该迭代器可能是end())。

删除元素不会减少列表的容量,也不会减少已分配的内存量。若要释放多余的容量并尽可能多地释放内存,请调用squeeze()。

注意:当 `QList ` 未被隐式共享时,此函数仅会使指定位置及之后的所有迭代器失效。

另请参阅 insert() 和remove()。

QList<T>::iterator QList::erase(QList<T>::const_iterator begin, QList<T>::const_iterator end)

从begin 中移除所有元素,直至(但不包括)end 。返回一个迭代器,该迭代器指向调用前end 所引用的同一项。

删除元素不会改变列表的容量,也不会减少已分配的内存量。若要释放多余的容量并尽可能多地释放内存,请调用squeeze()。

注意:当 QList 未被隐式共享时,此函数仅会使指定位置及之后的所有迭代器失效。

这是一个重载函数。

QList<T> &QList::fill(QList<T>::parameter_type value, qsizetype size = -1)

将value 赋值给列表中的所有项目。如果size 不等于-1(默认值),则会预先将列表调整为size 的大小。

示例:

QList<QString> list(3);
list.fill("Yes");
// list: ["Yes", "Yes", "Yes"]

list.fill("oh", 5);
// list: ["oh", "oh", "oh", "oh", "oh"]

另请参阅 resize()。

T &QList::first()

返回列表中第一个元素的引用。该函数假设列表不为空。

另请参阅 last()、isEmpty() 和constFirst()。

[since 6.0] QList<T> QList::first(qsizetype n) const

返回一个子列表,其中包含该列表的前n 个元素。

注意: 当n < 0 或n >size() 时,行为未定义。

该函数在 Qt 6.0 中引入。

另请参阅 last() 和sliced()。

[noexcept] const T &QList::first() const

这是一个重载函数。

QList<T>::reference QList::front()

提供此函数是为了兼容 STL。它等同于 `first()`。

[noexcept] QList<T>::const_reference QList::front() const

这是一个重载函数。

[noexcept] template <typename AT> qsizetype QList::indexOf(const AT &value, qsizetype from = 0) const

返回列表中value 首次出现的位置索引,从索引位置from 开始向前搜索。若未找到匹配项,则返回-1。

示例:

QList<QString> list{"A", "B", "C", "B", "A"};
list.indexOf("B");            // returns 1
list.indexOf("B", 1);         // returns 1
list.indexOf("B", 2);         // returns 3
list.indexOf("X");            // returns -1

此函数要求该值类型实现了 `operator==()` 方法。

另请参阅 lastIndexOf() 和contains()。

QList<T>::iterator QList::insert(qsizetype i, QList<T>::parameter_type value)

QList<T>::iterator QList::insert(qsizetype i, QList<T>::rvalue_ref value)

将value 插入到列表的索引位置i 处。如果i 为0,则将该值插入到列表开头;如果i 为size(),则将该值插入到列表末尾。

示例:

QList<QString> list = {"alpha", "beta", "delta"};
list.insert(2, "gamma");
// list: ["alpha", "beta", "gamma", "delta"]

对于大型列表,此操作可能较慢(线性时间),因为它需要将索引为i 及以上的所有项在内存中向后移动一个位置。如果您需要一个提供快速insert() 函数的容器类,请改用 std::list。

另请参阅 append()、prepend() 和remove()。

QList<T>::iterator QList::insert(QList<T>::const_iterator before, qsizetype count, QList<T>::parameter_type value)

在迭代器before 所指向的项目前面插入count 个value 的副本。返回一个指向已插入项目中第一个项目的迭代器。

QList<T>::iterator QList::insert(QList<T>::const_iterator before, QList<T>::parameter_type value)

QList<T>::iterator QList::insert(QList<T>::const_iterator before, QList<T>::rvalue_ref value)

在迭代器before 所指向的项之前插入value 。返回一个指向已插入项的迭代器。

QList<T>::iterator QList::insert(qsizetype i, qsizetype count, QList<T>::parameter_type value)

在列表的索引位置i 处插入count 个value 的副本。

示例:

QList<double> list = {2.718, 1.442, 0.4342};
list.insert(1, 3, 9.9);
// list: [2.718, 9.9, 9.9, 9.9, 1.442, 0.4342]

这是一个重载函数。

[constexpr noexcept] bool QList::isEmpty() const

如果列表的大小为 0,则返回true ;否则返回false 。

另请参阅 size() 和resize()。

T &QList::last()

返回列表中最后一个元素的引用。该函数假设列表不为空。

另请参阅 first()、isEmpty(),以及constLast()。

[since 6.0] QList<T> QList::last(qsizetype n) const

返回一个子列表,其中包含该列表中最后n 个元素。

注意: 当n < 0 或n >size() 时,行为未定义。

该函数在 Qt 6.0 中引入。

另请参阅 first() 和sliced()。

[noexcept] const T &QList::last() const

这是一个重载函数。

[noexcept] template <typename AT> qsizetype QList::lastIndexOf(const AT &value, qsizetype from = -1) const

返回列表中值value 最后一次出现的索引位置,从索引位置from 开始向后搜索。如果from 为-1(默认值),则从最后一个元素开始搜索。如果没有匹配的元素,则返回-1。

示例:

QList<QString> list = {"A", "B", "C", "B", "A"};
list.lastIndexOf("B");        // returns 3
list.lastIndexOf("B", 3);     // returns 3
list.lastIndexOf("B", 2);     // returns 1
list.lastIndexOf("X");        // returns -1

此函数要求该值类型实现了operator==() 接口。

另请参阅 indexOf()。

[constexpr noexcept] qsizetype QList::length() const

与size() 和count() 相同。

另请参阅 size() 和count()。

[static constexpr, since 6.8] qsizetype QList::maxSize()

[constexpr noexcept, since 6.8] qsizetype QList::max_size() const

它返回列表理论上能容纳的元素最大数量。实际上,该数值可能会小得多,具体取决于系统可用的内存大小。

这些函数在 Qt 6.8 中首次引入。

QList<T> QList::mid(qsizetype pos, qsizetype length = -1) const

返回一个子列表,其中包含该列表中从位置pos 开始的元素。如果length 为-1(默认值),则包含pos 之后的所有元素;否则,包含length 个元素(如果元素数量少于length 个,则包含所有剩余元素)。

void QList::move(qsizetype from, qsizetype to)

将索引位置为from 的项目移动到索引位置to 。

from 且to 必须在数组边界范围内。

例如,要将第一个元素移动到列表末尾:

QList<int>list={1, 2, 3};
list.move(0,list.size()- 1);
qDebug() << list; // Prints "QList(2, 3, 1)"

[noexcept] void QList::pop_back()

提供此函数是为了与STL兼容。它等同于removeLast()。

[noexcept] void QList::pop_front()

提供此函数是为了兼容 STL。它等同于 `removeFirst()`。

void QList::prepend(QList<T>::parameter_type value)

void QList::prepend(QList<T>::rvalue_ref value)

将value 插入列表开头。

示例:

QList<QString> list;
list.prepend("one");
list.prepend("two");
list.prepend("three");
// list: ["three", "two", "one"]

这与 list.insert(0,value) 的效果相同。

通常,此操作速度相对较快(摊还时间复杂度为常数)。QList 能够在列表数据开头分配额外内存,并朝该方向扩展,而无需在每次操作时重新分配内存或移动数据。但是,如果您需要一个能保证前缀插入时间复杂度为常数的容器类,请改用 std::list;否则,建议优先使用QList 。

另请参阅 append() 和insert()。

void QList::push_back(QList<T>::parameter_type value)

提供此函数是为了与 STL 兼容。它等同于 append(value)。

void QList::push_back(QList<T>::rvalue_ref value)

这是一个重载函数。

void QList::push_front(QList<T>::parameter_type value)

void QList::push_front(QList<T>::rvalue_ref value)

提供此函数是为了兼容 STL。它等同于 prepend(value)。

QList<T>::reverse_iterator QList::rbegin()

返回一个STL 风格的反向迭代器,该迭代器指向列表中第一个元素,且顺序为反向。

警告: 当脱离上下文或修改QList 时,返回的迭代器将失效。

另请参阅 begin()、crbegin() 和rend()。

[noexcept] QList<T>::const_reverse_iterator QList::rbegin() const

这是一个重载函数。

void QList::remove(qsizetype i, qsizetype n = 1)

从列表中移除索引位置为i 开始的n 个元素。

移除元素时将保留列表的容量,不会减少已分配的内存。若要释放多余的容量并尽可能释放内存,请调用squeeze()。

注意:当 QList 未被隐式共享时,此函数仅会使指定位置及之后位置的迭代器失效。

另请参阅 insert()、replace() 和fill()。

template <typename AT = T> qsizetype QList::removeAll(const AT &t)

从列表中移除所有与t 相等的元素。若移除了元素,则返回移除的元素个数。

移除元素不会减少列表的容量,也不会减少已分配的内存。若要释放多余的容量并尽可能多地释放内存,请调用squeeze()。

另请参阅 removeOne()。

void QList::removeAt(qsizetype i)

移除索引位置为i 的元素。等同于

remove(i);

删除元素不会减少列表的容量,也不会减少已分配的内存量。若要释放多余的容量并尽可能多地释放内存,请调用squeeze()。

注意:当 `QList ` 未被隐式共享时,此函数仅会使指定位置及之后的迭代器失效。

另请参阅 remove()。

[noexcept] void QList::removeFirst()

移除列表中的第一个元素。调用此函数等同于调用 remove(0)。列表不能为空。如果列表可以为空,请在调用此函数之前先调用isEmpty()。

删除元素不会减少列表的容量,也不会减少已分配的内存量。若要释放多余的容量并尽可能释放更多内存,请调用squeeze()。

另请参阅 remove()、takeFirst() 和isEmpty()。

[since 6.1] template <typename Predicate> qsizetype QList::removeIf(Predicate pred)

从列表中移除所有满足谓词 `pred ` 为真条件的元素。如果移除了元素,则返回移除的元素个数。

该函数在 Qt 6.1 中引入。

另请参阅 removeAll()。

[noexcept] void QList::removeLast()

移除列表中的最后一个元素。调用此函数等同于调用 remove(size() - 1)。列表不能为空。如果列表可以为空,请在调用此函数之前先调用isEmpty()。

删除元素不会减少列表的容量,也不会减少已分配的内存量。若要释放多余的容量并尽可能多地释放内存,请调用squeeze()。

另请参阅 remove()、takeLast()、removeFirst() 和isEmpty()。

template <typename AT = T> bool QList::removeOne(const AT &t)

从列表中移除第一个与t 相等的元素。返回是否确实移除了该元素。

移除元素不会减少列表的容量,也不会减少已分配的内存量。若要释放多余的容量并尽可能多地释放内存,请调用squeeze()。

另请参阅 removeAll()。

QList<T>::reverse_iterator QList::rend()

返回一个STL 风格的反向迭代器,该迭代器指向列表中最后一个元素之后的下一个位置,且顺序为反向。

警告: 当脱离列表或修改QList 时,返回的迭代器将失效。

另请参阅 end()、crend() 和rbegin()。

[noexcept] QList<T>::const_reverse_iterator QList::rend() const

这是一个重载函数。

void QList::replace(qsizetype i, QList<T>::parameter_type value)

void QList::replace(qsizetype i, QList<T>::rvalue_ref value)

将索引位置为i 的项替换为value 。

i i 必须是列表中的有效索引位置(即 0 <= < ())。size

另请参阅 operator[]() 和remove()。

void QList::reserve(qsizetype size)

尝试为至少size 个元素分配内存。

如果您事先知道列表的大小,应调用此函数以避免内存重新分配和内存碎片化。如果您经常调整列表的大小,性能通常也会得到提升。

如果对所需空间大小不确定,通常最好将上界设为size ,或者如果严格的上界远大于此值,则采用对最可能大小的较高估计值。 如果size 被低估,一旦预留大小被超过,列表将按需扩展,这可能会导致比你最佳高估值更大的内存分配,并会减慢触发该操作的操作速度。

警告:reserve () 仅预留内存,但不会改变列表的大小。访问超出当前列表末尾的数据将导致未定义行为。若需访问超出当前列表末尾的内存,请使用resize()。

另请参阅 squeeze()、capacity() 和resize()。

[since 6.0] void QList::resize(qsizetype size)

[since 6.0] void QList::resize(qsizetype size, QList<T>::parameter_type c)

将列表的大小设置为size 。如果size 大于当前大小,则将元素追加到列表末尾;新元素将使用默认构造值或c 进行初始化。如果size 小于当前大小,则从列表末尾移除元素。

如果该列表不是共享的,则会保留capacity()。请使用squeeze()来释放多余的容量。

注意:在 Qt 5.7 之前的版本中(针对QVector ;QList 直到 6.0 版本才引入resize()),此函数会释放列表占用的内存,而非保留其容量。

这些函数是在 Qt 6.0 中引入的。

另请参阅 size()。

[since 6.8] void QList::resizeForOverwrite(qsizetype size)

将列表的大小设置为size 。如果size 小于当前大小,则从列表末尾移除元素;如果size 大于当前大小,则在列表末尾添加元素;QList 将尝试不初始化这些新元素。

具体而言:

  • 如果T 具有一个接受Qt::Uninitialized 的构造函数,则将使用该构造函数来初始化这些元素;
  • 否则,每个元素将进行默认构造。对于可简单构造的类型(如int 、float 等),这相当于不初始化它们。

该函数于 Qt 6.8 中引入。

void QList::shrink_to_fit()

提供此函数是为了兼容 STL。它等同于 `squeeze()`。

[constexpr noexcept] qsizetype QList::size() const

返回列表中的项目数量。

另请参阅 isEmpty() 和resize()。

[since 6.0] QList<T> QList::sliced(qsizetype pos, qsizetype n) const

返回一个子列表,其中包含该列表中从位置pos 开始的n 个元素。

注意: 当pos < 0、n < 0 或pos +n >size() 时,行为 未定义。

该函数在 Qt 6.0 中引入。

另请参阅 first() 和last()。

[since 6.0] QList<T> QList::sliced(qsizetype pos) const

返回一个子列表,其中包含该列表从位置pos 开始直至末尾的所有元素。

注意: 当pos < 0 或pos >size() 时,行为未定义。

这是一个重载函数。

该函数于 Qt 6.0 中引入。

另请参阅 first() 和last()。

void QList::squeeze()

释放存储这些项目所不需要的内存。

此函数的唯一目的是提供一种方法来微调QList 的内存使用情况。通常情况下,您几乎无需调用此函数。

另请参阅 reserve() 和capacity()。

bool QList::startsWith(QList<T>::parameter_type value) const

如果该列表不为空且其第一个元素等于value ,则返回true ;否则返回false 。

另请参阅 isEmpty() 和first()。

[noexcept] void QList::swap(QList<T> &other)

将此列表与other 互换。此操作速度极快,且绝不会失败。

void QList::swapItemsAt(qsizetype i, qsizetype j)

将索引位置为i 的项与索引位置为j 的项互换。该函数假设i 和j 均不小于0且小于size()。为避免出错,请验证i 和j 均不小于0且小于size()。

T QList::takeAt(qsizetype i)

移除索引位置为i 的元素并返回该元素。

等同于

T t = at(i);
remove(i);
return t;

注意:当 QList 未被隐式共享时,此函数仅会使指定位置及之后的所有迭代器失效。

另请参阅 takeFirst() 和takeLast()。

QList<T>::value_type QList::takeFirst()

移除列表中的第一个元素并返回该元素。此函数假设列表不为空。为避免出错,请在调用此函数之前先调用isEmpty()。

另请参阅 takeLast() 和removeFirst()。

QList<T>::value_type QList::takeLast()

移除列表中的最后一个元素并返回该元素。该函数假设列表不为空。为避免出错,请在调用此函数之前先调用isEmpty()。

如果您不使用返回值,removeLast() 的效率更高。

另请参阅 takeFirst() 和removeLast()。

T QList::value(qsizetype i) const

返回列表中索引位置为i 的值。

如果索引i 超出范围,该函数将返回一个默认构造的值。如果您确定i 在范围内,可以使用at() 代替,其执行速度会稍快一些。

另请参阅 at() 和operator[]()。

T QList::value(qsizetype i, QList<T>::parameter_type defaultValue) const

如果索引i 超出范围,该函数将返回defaultValue 。

这是一个重载函数。

bool QList::operator!=(const QList<T> &other) const

如果 `other ` 与该列表不相同,则返回 `true `;否则返回 `false`。

如果两个列表包含相同的值且顺序相同,则认为它们相等。

此函数要求该值类型实现了operator==() 接口。

另请参阅 operator==()。

QList<T> QList::operator+(QList<T> &&other) &&

QList<T> QList::operator+(const QList<T> &other) &&

QList<T> QList::operator+(QList<T> &&other) const &

QList<T> QList::operator+(const QList<T> &other) const &

返回一个列表,其中包含该列表中的所有项目,以及紧随其后的other 列表中的所有项目。

另请参阅 operator+=()。

QList<T> &QList::operator+=(const QList<T> &other)

将other 列表中的项目追加到该列表中,并返回该列表的引用。

另请参阅 operator+() 和append()。

[since 6.0] QList<T> &QList::operator+=(QList<T> &&other)

这是一个重载函数。

该函数在 Qt 6.0 中引入。

另请参阅 operator+() 和append()。

QList<T> &QList::operator+=(QList<T>::parameter_type value)

将value 追加到列表中。

这是一个重载函数。

另请参阅 append() 和operator<<()。

QList<T> &QList::operator+=(QList<T>::rvalue_ref value)

这是一个重载函数。

另请参阅 append() 和operator<<()。

bool QList::operator<(const QList<T> &other) const

如果该列表在词法上小于 other,则返回true ;否则返回false 。

该函数要求值类型实现了operator<() 接口。

QList<T> &QList::operator<<(QList<T>::parameter_type value)

将value 追加到列表中,并返回该列表的引用。

另请参阅 append() 和operator+=()。

QList<T> &QList::operator<<(const QList<T> &other)

将other 追加到列表中,并返回该列表的引用。

[since 6.0] QList<T> &QList::operator<<(QList<T> &&other)

这是一个重载函数。

该函数在 Qt 6.0 中引入。

QList<T> &QList::operator<<(QList<T>::rvalue_ref value)

这是一个重载函数。

另请参阅 append() 和operator+=()。

bool QList::operator<=(const QList<T> &other) const

如果该列表在词法上小于或等于 other ,则返回true ;否则返回false 。

该函数要求值类型实现了operator<() 函数。

[implicit] QList<T> &QList::operator=(QList<T> &&other)

将other 通过Move操作赋值给此QList 实例。

[implicit] QList<T> &QList::operator=(const QList<T> &other)

将other 赋值给此列表,并返回对此列表的引用。

QList<T> &QList::operator=(std::initializer_list<T> args)

将args 中的值集合赋给此QList 实例。

bool QList::operator==(const QList<T> &other) const

如果 `other ` 与该列表相等,则返回 `true `;否则返回 `false`。

如果两个列表包含相同的值且顺序相同,则认为它们相等。

此函数要求该值类型实现了operator==() 方法。

另请参阅 operator!=()。

bool QList::operator>(const QList<T> &other) const

如果该列表在词法意义上大于 ` other`,则返回 `true `;否则返回 `false`。

该函数要求值类型实现了operator<() 。

bool QList::operator>=(const QList<T> &other) const

如果该列表在词法上大于或等于 other ,则返回true ;否则返回false 。

该函数要求值类型实现了operator<() 。

QList<T>::reference QList::operator[](qsizetype i)

返回索引位置为i 的项目,作为可修改的引用。

i 该索引位置必须是列表中的有效索引位置(即,0 <=i <size())。

请注意,使用非 const 运算符可能会导致QList 执行深度复制。

另请参阅 at() 和value()。

[noexcept] QList<T>::const_reference QList::operator[](qsizetype i) const

与 (i) 相同。

这是一个重载函数。

相关的非成员

[since 6.1] template <typename T, typename AT> qsizetype erase(QList<T> &list, const AT &t)

从列表list 中移除所有与t 相等的元素。如果移除了元素,则返回移除的元素个数。

注意:与 QList::removeAll不同, t 不允许是list 中某个元素的引用。如果您无法确定是否存在这种情况,请复制t ,并使用该副本调用此函数。

该函数在 Qt 6.1 中引入。

另请参阅 QList::removeAll() 和erase_if 。

[since 6.1] template <typename T, typename Predicate> qsizetype erase_if(QList<T> &list, Predicate pred)

从列表list 中移除所有满足谓词pred 的元素。返回移除的元素个数(如有)。

该函数自 Qt 6.1 起引入。

另请参阅 erase 。

[noexcept(...)] template <typename T> size_t qHash(const QList<T> &key, size_t seed = 0)

返回key 的哈希值,并使用seed 作为计算的初始值。

T 类型必须为 qHash() 所支持。

注意: 当noexcept(qHashRange(key.cbegin(), key.cend(), seed)) 为true 时,此 函数为 noexcept。

template <typename T> QDataStream &operator<<(QDataStream &out, const QList<T> &list)

将列表list 写入流out 。

此函数要求值类型实现operator<<() 接口。

另请参阅 QDataStream 运算符的格式。

[since 6.9] auto operator<=>(const QList<T> &lhs, const QList<T> &rhs)

按字典顺序比较lhs 和rhs 的内容。返回最强适用类别类型的结果,即:若类型T 支持operator<=>() ,则返回decltype(lhs[0] <=> rhs[0]) ;否则返回std::weak_ordering 。

注意:此 运算符仅在 C++20 模式下可用,且仅当底层类型T 符合std::three_way_comparable 概念或提供operator<() 时才可用。

该函数于 Qt 6.9 中引入。

template <typename T> QDataStream &operator>>(QDataStream &in, QList<T> &list)

从流in 中读取一个列表,并将其读入list 中。

此函数要求值类型实现operator>>() 接口。

另请参阅 QDataStream 运算符的格式。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.