QLinkedList 类

template <typename T> class QLinkedList

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

头文件 #include <QLinkedList>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core5Compat)
target_link_libraries(mytarget PRIVATE Qt6::Core5Compat)
qmakeQT += core5 compat

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

公共类型

公共函数

QLinkedList()
QLinkedList(std::initializer_list<T> list)
QLinkedList(InputIterator first, InputIterator last)
QLinkedList(const QLinkedList<T> &other)
QLinkedList(QLinkedList<T> &&other)
~QLinkedList()
voidappend(const T &value)
T &back()
const T &back() const
QLinkedList<T>::iteratorbegin()
QLinkedList<T>::const_iteratorbegin() const
QLinkedList<T>::const_iteratorcbegin() const
QLinkedList<T>::const_iteratorcend() const
voidclear()
QLinkedList<T>::const_iteratorconstBegin() const
QLinkedList<T>::const_iteratorconstEnd() const
boolcontains(const T &value) const
intcount(const T &value) const
intcount() const
QLinkedList<T>::const_reverse_iteratorcrbegin() const
QLinkedList<T>::const_reverse_iteratorcrend() const
boolempty() const
QLinkedList<T>::iteratorend()
QLinkedList<T>::const_iteratorend() const
boolendsWith(const T &value) const
QLinkedList<T>::iteratorerase(QLinkedList<T>::iterator pos)
QLinkedList<T>::iteratorerase(QLinkedList<T>::iterator begin, QLinkedList<T>::iterator end)
T &first()
const T &first() const
T &front()
const T &front() const
QLinkedList<T>::iteratorinsert(QLinkedList::iterator before, const T &value)
boolisEmpty() const
T &last()
const T &last() const
voidpop_back()
voidpop_front()
voidprepend(const T &value)
voidpush_back(const T &value)
voidpush_front(const T &value)
QLinkedList::reverse_iteratorrbegin()
QLinkedList<T>::const_reverse_iteratorrbegin() const
intremoveAll(const T &value)
voidremoveFirst()
voidremoveLast()
boolremoveOne(const T &value)
QLinkedList::reverse_iteratorrend()
QLinkedList<T>::const_reverse_iteratorrend() const
intsize() const
boolstartsWith(const T &value) const
voidswap(QLinkedList &other)
TtakeFirst()
TtakeLast()
std::listtoStdList() const
booloperator!=(const QLinkedList &other) const
QLinkedListoperator+(const QLinkedList &other) const
QLinkedList &operator+=(const QLinkedList &other)
QLinkedList &operator+=(const T &value)
QLinkedList &operator<<(const QLinkedList &other)
QLinkedList &operator<<(const T &value)
QLinkedList &operator=(const QLinkedList &other)
booloperator==(const QLinkedList &other) const

静态公共成员

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

详细描述

QLinkedList是Qt的泛型容器类之一,它存储值列表,并提供基于迭代器的访问以及常数时间的插入和删除。

QList>和QLinkedList>提供类似的功能。以下是概述

  • 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)。有关这些类的详细信息,请参阅相关文档。

另请参阅 QLinkedListIteratorQMutableLinkedListIteratorQList

成员类型文档

QLinkedList::ConstIterator

Qt样式的QLinkedList::const_iterator的同义词。

QLinkedList::Iterator

Qt样式的QLinkedList::iterator的同义词。

QLinkedList::const_pointer

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

QLinkedList::const_reference

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

QLinkedList::const_reverse_iterator

QLinkedList::const_reverse_iterator类型定义为QLinkedList提供STL样式常量反向迭代器。

它实质上是对std::reverse_iterator<QLinkedList::const_iterator>的类型定义。

注意:在隐式共享容器上的迭代器不一定像STL迭代器那样工作。当在容器上处于活动状态时,应避免复制容器。更多信息请参阅隐式共享迭代器问题

另请参阅 QLinkedList::rbegin()、QLinkedList::rend()、QLinkedList::reverse_iteratorQLinkedList::const_iterator

QLinkedList::difference_type

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

QLinkedList::pointer

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

QLinkedList::reference

为 T 类型提供的 Typedef。为了与 STL 兼容而提供。

QLinkedList::reverse_iterator

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

它只是一个对 std::reverse_iterator 的 typedef。

注意:在隐式共享容器上的迭代器不一定像STL迭代器那样工作。当在容器上处于活动状态时,应避免复制容器。更多信息请参阅隐式共享迭代器问题

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

QLinkedList::size_type

为 int 类型提供的 Typedef。为了与 STL 兼容而提供。

QLinkedList::value_type

为 T 类型提供的 Typedef。为了与 STL 兼容而提供。

成员函数文档

[noexcept] QLinkedList::QLinkedList()

构造一个空的列表。

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

从由 list 指定的 std::initializer_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)

移动构造 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

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

另请参阅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

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

另请参阅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 T &value) const

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

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

另请参阅contains

int QLinkedList::count() const

等同于 size

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

返回一个指向列表中第一个元素(逆向顺序)的常量 STL-style 反向迭代器。

参见begin(),rbegin()和rend()。

[noexcept] QLinkedList<;《span class="type">T=>::const_reverse_iterator QLinkedList::crend() const

返回一个指向列表中最后一个元素之后的const STL风格的反向迭代器,按反向顺序。

参见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 beginQLinkedList<T>::iterator end)

这是一个重载的函数。

begin移除所有元素到end(不包括)。

T &QLinkedList::first()

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

参见last()和isEmpty

const T &QLinkedList::first() const

这是一个重载的函数。

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

返回一个包含 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 等效。

void QLinkedList::push_front(const T &value)

此函数提供以供与STL兼容。它与 prepend 等效。

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

返回一个列表,该列表包含此列表中的所有项,接着是其他列表中的所有项。

另请参阅 operator+=

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

将其他列表的项追加到此列表中,并返回对此列表的引用。

另请参阅 operator+()和append

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

这是一个重载的函数。

value追加到列表中。

QLinkedList<T> &QLinkedList::operator<<(const QLinkedList<T> &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!=

相关非成员

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

将链表 list 写入流 out

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

另请参阅QDataStream 运算符的格式

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

从流 in 读取链表到 list

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

另请参阅QDataStream 运算符的格式

© 2024 Qt 公司有限。包含在此的文档贡献是各自所有者的版权。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款授予的。Qt 和相应的标志是芬兰的 Qt 公司及其在世界其他地区的 商标。所有其他商标均为其各自所有者的财产。