QLinkedList Class

template <typename T> class QLinkedList

QLinkedList 类是一个提供链表的模板类。更多

Header: #include <QLinkedList>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core5Compat)
target_link_libraries(mytarget PRIVATE Qt6::Core5Compat)
qmake: QT += core5compat

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

公共类型

公共函数

QLinkedList()
QLinkedList(std::initializer_list<T> list)
QLinkedList(InputIterator first, InputIterator last)
QLinkedList(const QLinkedList<T> &other)
QLinkedList(QLinkedList<T> &&other)
~QLinkedList()
void append(const T &value)
T &back()
const T &back() const
QLinkedList<T>::iterator begin()
QLinkedList<T>::const_iterator begin() const
QLinkedList<T>::const_iterator cbegin() const
QLinkedList<T>::const_iterator cend() const
void clear()
QLinkedList<T>::const_iterator constBegin() const
QLinkedList<T>::const_iterator constEnd() const
bool contains(const T &value) const
int count() const
int count(const T &value) const
QLinkedList<T>::const_reverse_iterator crbegin() const
QLinkedList<T>::const_reverse_iterator crend() const
bool empty() const
QLinkedList<T>::iterator end()
QLinkedList<T>::const_iterator end() const
bool endsWith(const T &value) const
QLinkedList<T>::iterator erase(QLinkedList<T>::iterator pos)
QLinkedList<T>::iterator erase(QLinkedList<T>::iterator begin, QLinkedList<T>::iterator end)
T &first()
const T &first() const
T &front()
const T &front() const
QLinkedList<T>::iterator insert(QLinkedList<T>::iterator before, const T &value)
bool isEmpty() const
T &last()
const T &last() const
void pop_back()
void pop_front()
void prepend(const T &value)
void push_back(const T &value)
void push_front(const T &value)
QLinkedList<T>::reverse_iterator rbegin()
QLinkedList<T>::const_reverse_iterator rbegin() const
int removeAll(const T &value)
void removeFirst()
void removeLast()
bool removeOne(const T &value)
QLinkedList<T>::reverse_iterator rend()
QLinkedList<T>::const_reverse_iterator rend() const
int size() const
bool startsWith(const T &value) const
void swap(QLinkedList<T> &other)
T takeFirst()
T takeLast()
std::list<T> toStdList() const
bool operator!=(const QLinkedList<T> &other) const
QLinkedList<T> operator+(const QLinkedList<T> &other) const
QLinkedList<T> &operator+=(const QLinkedList<T> &other)
QLinkedList<T> &operator+=(const T &value)
QLinkedList<T> &operator<<(const QLinkedList<T> &other)
QLinkedList<T> &operator<<(const T &value)
QLinkedList<T> &operator=(const QLinkedList<T> &other)
bool operator==(const QLinkedList<T> &other) const

静态公共成员

QLinkedList<T> fromStdList(const std::list<T> &list)
QDataStreamIfHasOStreamOperatorsContainer<QLinkedList<T>, T> operator<<(QDataStream &out, const QLinkedList<T> &list)
QDataStreamIfHasIStreamOperatorsContainer<QLinkedList<T>, T> operator>>(QDataStream &in, QLinkedList<T> &list)

详细说明

QLinkedList<T> 是 Qt 的通用容器类之一。它存储一个值列表,并提供基于迭代器的访问以及恒定时间的插入和移除。

QList<T> 和 QLinkedList<T> 提供了类似的功能。下面是一个概述:

  • 在大多数情况下,QList 是最合适的类。它基于索引的 API 比 QLinkedList 基于迭代器的 API 更方便。它的项占据相邻的内存位置。它还能减少可执行文件中的代码量。
  • 如果您需要一个真正的链接列表,并保证在列表中间插入的时间不变,以及项目的迭代器而非索引,请使用 QLinkedList。

下面是一个存储整数的 QLinkedList 和一个存储QTime 值的 QLinkedList 的示例:

QLinkedList<int> integerList;
QLinkedList<QTime> timeList;

QLinkedList 存储一个项目列表。默认构造函数会创建一个空列表。要在列表中插入项目,可以使用操作符<<():

QLinkedList<QString> list;
list << "one" << "two" << "three";
// list: ["one", "two", "three"]

如果要获取链接列表中的第一个或最后一个项目,请使用first() 或last() 。如果要从列表的任一端移除一个项目,请使用removeFirst() 或removeLast() 。如果要移除给定值在列表中的所有出现次数,请使用removeAll()。

一个常见的需求是移除列表中的第一个或最后一个项目,并对其进行处理。为此,QLinkedList 提供了takeFirst() 和takeLast() 。下面是一个循环,从列表中逐个删除项目,并调用delete

QLinkedList<QWidget *> list;
...
while (!list.isEmpty())
    delete list.takeFirst();

QLinkedList 的值类型必须是可分配的数据类型。这涵盖了大多数常用的数据类型,但编译器不会让你存储一个 QWidget 作为值;相反,你可以存储一个 QWidget *。一些函数有额外的要求,例如contains() 和removeAll() 希望值类型支持operator==() 。这些要求按函数逐一记录。

如果要插入、修改或删除列表中间的项目,必须使用迭代器。QLinkedList 提供Java 风格的迭代器QLinkedListIteratorQMutableLinkedListIterator )和STL 风格的迭代器QLinkedList::const_iteratorQLinkedList::iterator )。详情请查看这些类的文档。

另请参阅 QLinkedListIterator,QMutableLinkedListIterator, 和QList

成员类型文档

QLinkedList::ConstIterator

QLinkedList::const_iterator 的 Qt-style 同义词。

QLinkedList::Iterator

QLinkedList::iterator 的 Qt-style 同义词。

QLinkedList::const_pointer

const T * 的类型定义。为与 STL 兼容而提供。

QLinkedList::const_reference

const T & 的类型定义。为与 STL 兼容而提供。

QLinkedList::const_reverse_iterator

QLinkedList::const_reverse_iterator 类型定义为QLinkedList 提供了 STL 风格的 const reverse iterator。

它只是std::reverse_iterator<QLinkedList::const_iterator> 的一个类型定义。

警告: 隐式共享容器上的迭代器的工作方式与 STL-迭代器并不完全相同。当容器上的迭代器处于活动状态时,应避免复制该容器。更多信息,请阅读隐式共享迭代器问题

另请参见 QLinkedList::rbegin(),QLinkedList::rend(),QLinkedList::reverse_iterator, 和QLinkedList::const_iterator

QLinkedList::difference_type

ptrdiff_t 的类型定义。为与 STL 兼容而提供。

QLinkedList::pointer

T * 的类型定义。为与 STL 兼容而提供。

QLinkedList::reference

T & 的类型定义。为与 STL 兼容而提供。

QLinkedList::reverse_iterator

QLinkedList::reverse_iterator 类型定义为QLinkedList 提供了 STL 风格的非const 反向迭代器。

它只是std::reverse_iterator<QLinkedList::iterator> 的一个类型定义。

警告: 隐式共享容器上的迭代器的工作方式与 STL-迭代器并不完全相同。当容器上的迭代器处于活动状态时,应避免复制该容器。更多信息,请阅读隐式共享迭代器问题

另请参见 QLinkedList::rbegin(),QLinkedList::rend(),QLinkedList::const_reverse_iterator, 和QLinkedList::iterator

QLinkedList::size_type

int 的类型定义。为与 STL 兼容而提供。

QLinkedList::value_type

为 T 提供的类型定义,用于兼容 STL。

成员函数文档

[noexcept] QLinkedList::QLinkedList()

构造一个空列表。

QLinkedList::QLinkedList(std::initializer_list<T> list)

list 指定的 std::initializer_list 构造一个 list。

只有当编译器支持 C++11 初始化器列表时,才会启用该构造函数。

template <typename InputIterator, QtPrivate::IfIsInputIterator<InputIterator> = true> QLinkedList::QLinkedList(InputIterator first, InputIterator last)

构造一个内容在迭代器范围 [first,last) 内的列表。

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

QLinkedList::QLinkedList(const QLinkedList<T> &other)

构造other 的副本。

由于 QLinkedList 是隐式共享的,因此该操作在恒定时间内完成。这使得从函数返回 QLinkedList 的速度非常快。如果共享实例被修改,它将被复制(写时复制),这需要线性时间

另请参见 operator=()。

[noexcept] QLinkedList::QLinkedList(QLinkedList<T> &&other)

Move- 构造一个 QLinkedList 实例,使其指向other 所指向的同一对象。

QLinkedList::~QLinkedList()

销毁列表。对列表中值的引用以及该列表的所有迭代器都将失效。

void QLinkedList::append(const T &value)

在列表末尾插入value

举例说明:

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

这与 list.insert(end(),value) 相同。

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

T &QLinkedList::back()

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

const T &QLinkedList::back() const

这是一个重载函数。

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

返回指向列表中第一个项目的STL 样式迭代器

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

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

这是一个重载函数。

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

返回指向列表中第一个项目的 ConstSTL 样式迭代器

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

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

返回一个常STL 样式的迭代器,指向列表中最后一项之后的虚项。

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

void QLinkedList::clear()

删除列表中的所有项目。

另请参阅 removeAll().

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

返回指向列表中第一个项目的 ConstSTL 样式迭代器

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

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

返回一个常STL 样式的迭代器,指向列表中最后一项之后的虚项。

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

bool QLinkedList::contains(const T &value) const

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

该函数要求值类型具有operator==() 的实现。

另请参见 QLinkedListIterator::findNext() 和QLinkedListIterator::findPrevious()。

int QLinkedList::count() const

size() 相同。

int QLinkedList::count(const T &value) const

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

该函数要求值类型具有operator==() 的实现。

另请参见 contains()。

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

返回一个 ConstSTL 样式的反向迭代器,按相反顺序指向列表中的第一个项目。

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

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

返回一个 ConstSTL 样式的反向迭代器,以相反的顺序指向列表中最后一个项目之后的一个项目。

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

bool QLinkedList::empty() const

该函数与 STL 兼容。它与isEmpty() 等价,如果列表为空,则返回true

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

返回一个STL 样式的迭代器,指向列表中最后一个项目之后的假想项目。

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

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

这是一个重载函数。

bool QLinkedList::endsWith(const T &value) const

如果列表不为空,且最后一项等于value ,则返回true ;否则返回false

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

QLinkedList<T>::iterator QLinkedList::erase(QLinkedList<T>::iterator pos)

从列表中删除迭代器pos 指向的项目,并返回指向列表中下一个项目的迭代器(可能是end() )。

另请参阅 insert().

QLinkedList<T>::iterator QLinkedList::erase(QLinkedList<T>::iterator begin, QLinkedList<T>::iterator end)

这是一个重载函数。

删除beginend (但不包括 )的所有项目。

T &QLinkedList::first()

返回列表中第一个项目的引用。此函数假定列表不是空的。

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

const T &QLinkedList::first() const

这是一个重载函数。

[static] QLinkedList<T> QLinkedList::fromStdList(const std::list<T> &list)

返回QLinkedList 对象,其中包含list 中的数据。QLinkedList 中元素的顺序与list 中相同。

示例

std::list<double> stdlist;
list.push_back(1.2);
list.push_back(0.5);
list.push_back(3.14);

QLinkedList<double> list = QLinkedList<double>::fromStdList(stdlist);

另请参见 toStdList()。

T &QLinkedList::front()

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

const T &QLinkedList::front() const

这是一个重载函数。

QLinkedList<T>::iterator QLinkedList::insert(QLinkedList<T>::iterator before, const T &value)

在迭代器before 指向的项目前插入value 。返回指向插入项的迭代器。

另请参见 erase().

bool QLinkedList::isEmpty() const

如果列表中没有项目,则返回true ;否则返回 false。

另请参阅 size().

T &QLinkedList::last()

返回列表中最后一项的引用。此函数假定列表不是空的。

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

const T &QLinkedList::last() const

这是一个重载函数。

void QLinkedList::pop_back()

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

void QLinkedList::pop_front()

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

void QLinkedList::prepend(const T &value)

在列表开头插入value

举例说明:

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

这与 list.insert(begin(),value) 相同。

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

void QLinkedList::push_back(const T &value)

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

void QLinkedList::push_front(const T &value)

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

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

返回一个STL 样式的反向迭代器,按相反顺序指向列表中的第一个项目。

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

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

这是一个重载函数。

int QLinkedList::removeAll(const T &value)

删除value 在列表中的所有出现。

示例

QList<QString> list;
list << "sun" << "cloud" << "sun" << "rain";
list.removeAll("sun");
// list: ["cloud", "rain"]

该函数要求值类型具有operator==() 的实现。

另请参阅 insert()。

void QLinkedList::removeFirst()

删除列表中的第一个项目。

这与 erase(begin()) 相同。

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

void QLinkedList::removeLast()

删除列表中的最后一个项目。

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

bool QLinkedList::removeOne(const T &value)

删除value 在列表中的首次出现。成功时返回true ,否则返回false

示例

QList<QString> list;
list << "sun" << "cloud" << "sun" << "rain";
list.removeOne("sun");
// list: ["cloud", "sun", "rain"]

此函数要求值类型具有operator==() 的实现。

另请参见 insert()。

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

返回一个STL 样式的反向迭代器,以相反的顺序指向列表中最后一个项目之后的一个项目。

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

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

这是一个重载函数。

int QLinkedList::size() const

返回列表中的项目数。

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

bool QLinkedList::startsWith(const T &value) const

如果列表不为空且其第一项等于value ,则返回true ;否则返回false

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

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

将列表other 与此列表互换。这一操作非常快捷,从未出现过故障。

T QLinkedList::takeFirst()

移除列表中的第一个项目并返回。

如果不使用返回值,removeFirst() 更有效。

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

T QLinkedList::takeLast()

移除列表中的最后一个项目并返回。

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

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

std::list<T> QLinkedList::toStdList() const

返回包含此QLinkedList 中数据的 std::list 对象。示例:

QLinkedList<double> list;
list << 1.2 << 0.5 << 3.14;

std::list<double> stdlist = list.toStdList();

另请参阅 fromStdList().

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

如果other 不等于此列表,则返回true ;否则返回false

如果两个列表以相同顺序包含相同的值,则视为相等。

此函数要求值类型实现operator==()

另请参见 operator==()。

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

返回一个列表,其中包含此列表中的所有项目,然后是other 列表中的所有项目。

另请参阅 operator+=()。

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

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

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

QLinkedList<T> &QLinkedList::operator+=(const T &value)

这是一个重载函数。

value 追加到列表中。

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

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

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

QLinkedList<T> &QLinkedList::operator<<(const T &value)

这是一个重载函数。

value 追加到列表中。

QLinkedList<T> &QLinkedList::operator=(const QLinkedList<T> &other)

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

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

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

如果两个列表以相同顺序包含相同的值,则视为相等。

此函数要求值类型实现operator==()

另请参阅 operator!=()。

相关非成员

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

将链接表list 写入流out

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

另请参阅 QDataStream 操作符的格式

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

将链接列表从流in 读入list

该函数要求值类型实现operator>>()

另请参阅 QDataStream 操作符的格式

© 2025 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.