Qt中QList与QLinkedList类的常用方法总结

Qt中QList与QLinkedList类的常用方法总结

QList和QLinkedList是Qt中常用的两种容器类,它们都具有自己的特点和适用场景。这里我们来一一总结它们的常用方法。

QList

QList是一个动态数组,底层实现是一个指针数组,支持随机存取和快速插入删除操作,适合存储较小的元素。下面是QList的常用方法:

构造函数

QList<Type> list; // 默认构造函数,构造一个空链表
QList<const Type &> list(const QList<Type> &other); // 拷贝构造函数,构造一个other的拷贝
QList<Type> list(int size, const Type &value = Type()); // 构造一个包含size个value的QList

大小和容量

int size() const; // 返回链表中元素的个数
bool isEmpty() const; // 判断链表是否为空
void clear(); // 清空链表中的元素
void reserve(int size); // 提前分配size个空间,提高插入删除效率
int capacity() const; // 返回链表当前能够存储的元素个数

元素访问

Type &at(int i); // 返回索引i处的元素,并进行边界检查
const Type &at(int i) const; // 同上,但返回的元素是常量
Type &operator[](int i); // 重载[]运算符,返回索引i处的元素,不进行边界检查
const Type &operator[](int i) const; // 同上,但返回的元素是常量
Type &first(); // 返回第一个元素
const Type &first() const; // 同上,但返回的元素是常量
Type &last(); // 返回最后一个元素
const Type &last() const; // 同上,但返回的元素是常量

插入和删除

void append(const Type &value); // 在链表末尾添加一个元素
void prepend(const Type &value); // 在链表开头插入一个元素
void insert(int i, const Type &value); // 在索引i处插入一个元素
void removeAt(int i); // 删除索引i处的元素
int removeAll(const Type &value); // 删除链表中所有值为value的元素,并返回删除数量
void removeFirst(); // 删除第一个元素
void removeLast(); // 删除最后一个元素

查找

int indexOf(const Type &value, int from = 0) const; // 从from索引开始查找第一个值为value的元素,返回其索引,未找到则返回-1
int lastIndexOf(const Type &value, int from = -1) const; // 从from索引开始查找最后一个值为value的元素,返回其索引,未找到则返回-1
bool contains(const Type &value) const; // 判断链表中是否存在值为value的元素

下面是一段使用QList的示例代码:

QList<int> list;
list.append(1);
list.append(2);
list.append(3);
list.prepend(0);
list.insert(2, 4);
list.removeAt(3);

for (int i = 0; i < list.size(); ++i) {
    qDebug() << list[i];
}

if (list.contains(2)) {
    list.removeAll(2);
}

QLinkedList

QLinkedList是一个双向链表,底层实现是每个节点记录前后指针,支持快速插入删除和迭代,适合存储较大的元素。下面是QLinkedList的常用方法:

构造函数

QLinkedList<Type> list; // 默认构造函数,构造一个空链表
QLinkedList<const Type &> list(const QLinkedList<Type> &other); // 拷贝构造函数,构造一个other的拷贝

大小和容量

int size() const; // 返回链表中元素的个数
bool isEmpty() const; // 判断链表是否为空
void clear(); // 清空链表中的元素

元素访问

Type &first(); // 返回第一个元素
const Type &first() const; // 同上,但返回的元素是常量
Type &last(); // 返回最后一个元素
const Type &last() const; // 同上,但返回的元素是常量

插入和删除

void append(const Type &value); // 在链表末尾添加一个元素
void prepend(const Type &value); // 在链表开头插入一个元素
void insert(iterator before, const Type &value); // 在before指针前插入一个元素
void remove(iterator pos); // 删除pos指针所指的元素
void removeFirst(); // 删除第一个元素
void removeLast(); // 删除最后一个元素

迭代器

iterator begin(); // 返回指向第一个元素的迭代器
const_iterator begin() const; // 同上,但返回的迭代器是常量
iterator end(); // 返回指向尾部的迭代器
const_iterator end() const; // 同上,但返回的迭代器是常量
iterator insert(iterator before, int n, const Type &value); // 在before指针前插入n个值为value的元素
QListIterator<Type> iterator(); // 返回一个QListIterator对象,用于对链表进行正序遍历
QMutableListIterator<Type> iterator(); // 返回一个QMutableListIterator对象,用于对链表进行修改

下面是一段使用QLinkedList的示例代码:

QLinkedList<QString> list;
list.append("World");
list.prepend("Hello");
list.insert(list.begin() + 1, "Qt");
list.removeLast();

for (QString str : list) {
    qDebug() << str;
}

QLinkedListIterator<QString> iterator(list);
while (iterator.hasNext()) {
    QString str = iterator.next();
    if (str == "Hello") {
        iterator.remove();
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Qt中QList与QLinkedList类的常用方法总结 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • SpringBoot Admin健康检查功能的实现

    针对“SpringBoot Admin健康检查功能的实现”的完整攻略,我来详细讲解下。 1. SpringBoot Admin SpringBoot Admin是一个管理和监控SpringBoot应用的开源框架,它提供了用户友好的Web UI界面来查看和管理SpringBoot应用程序。它还提供了实时监视和通知等功能,并支持JMX-over-WebSocke…

    other 2023年6月27日
    00
  • 详解Mybatis是如何把数据库数据封装到对象中的

    详解Mybatis是如何把数据库数据封装到对象中的 Mybatis是一种Java持久层框架,它提供了一种将数据库数据封装到对象中的灵活方式。下面是Mybatis如何实现这一过程的详细攻略: 1. 配置数据库连接 首先,需要在Mybatis的配置文件中配置数据库连接信息,包括数据库驱动、连接URL、用户名和密码等。以下是一个示例: <configurat…

    other 2023年10月18日
    00
  • python编写时怎样换行

    在 Python 编写时,我们可以使用多种方法来实现换行,包括以下两种: 1.使用换行符 \n 在 Python 语言中,使用 \n 即可实现换行操作。在字符串中加入 \n,Python 遇到该字符时会自动将其前面的内容输出到一行,并跳到下一行继续输出后续的内容。示例如下: print("Hello, \nPython!") # 输出 H…

    其他 2023年4月16日
    00
  • Linux中修改环境变量及生效方法

    下面是关于“Linux中修改环境变量及生效方法”的完整攻略: 一、什么是环境变量 环境变量是一种存储在操作系统中的变量,用于在系统中指定某些应用程序的行为或配置。在Linux中,常见的环境变量包括PATH、HOME、USER等,这些变量会被系统和其他应用程序使用,因此对它们的修改可能会对整个系统产生影响。 二、如何修改环境变量 Linux中修改环境变量有多种…

    other 2023年6月27日
    00
  • C语言中双向链表和双向循环链表详解

    双向链表详解 什么是双向链表? 在C语言中,双向链表是一种常用的数据结构,它是由一系列节点组成,每个节点有两个指针,一个指向前一个节点,一个指向后一个节点。 双向链表与单向链表相比,多了指向前一个节点的指针,这使得我们可以很方便地实现双向遍历,提高了搜索效率。 双向链表中节点的定义 struct Node { int data; struct Node *p…

    other 2023年6月27日
    00
  • base64之js压缩图片

    base64之js压缩图片 在Web开发中,图像文件传输占据了极大的带宽。为此,我们可以使用一些方法来减少图像传输的大小。其中,将图像压缩为base64编码字符串并将其添加到HTML或CSS文件中是一种常见的方法。在这篇文章中,我们将学习如何使用JavaScript对图像进行压缩,并将其转换为base64编码字符串以缩小文件的大小。 为什么要使用base64…

    其他 2023年3月28日
    00
  • 解决eplan卡顿的方法 亲测有效

    以下是关于“解决Eplan卡顿的方法亲测有效”的完整攻略,包含两个示例说明。 什么是Eplan卡顿 Eplan卡顿是指在使用Eplan软件时,出现卡顿、卡死、应缓等现象。这种情况通常会影响用户的工作效率和体验。 解决Eplan卡顿的方法 以下是一些解决Eplan卡顿的方法: 升级电脑硬件:Eplan软件对电脑的硬件要求比较高,如果电脑配置较低,可能会导致Ep…

    other 2023年5月9日
    00
  • 关于dll:如何在gcc中链接到libatomic库

    关于dll:如何在gcc中链接到libatomic库 在GCC中,可以使用libatomic库来实现原子操作。本攻略将介绍如何在GCC中链接到libatomic库,并使用动态链接库(DLL)来实现。以下是关于如何在GCC中链接到lib库的完整攻略: 1. 确认是否需要链接libatomic库 在使用GCC编译程序时,如果使用了原子操作,那么就需要链接到lib…

    other 2023年5月8日
    00
合作推广
合作推广
分享本页
返回顶部