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日

相关文章

  • PHP 类与构造函数解析

    PHP 类是一种面向对象的编程方式,使用类可以更好地管理和组织代码,并且提高代码的可重用性。构造函数作为类的一种特殊函数,被用来实例化(创建)类的对象,通过在构造函数中定义的变量进行初始化,方便类的使用和开发。 下面我将从以下几个方面详细讲解“PHP 类与构造函数解析”的完整攻略: 类的定义与使用 一个基本的 PHP 类定义如下所示: class Perso…

    other 2023年6月26日
    00
  • ACCESS数据库备注的字段类型怎么设置为长文本?

    要将ACCESS数据库备注的字段类型设置为长文本,需要完成以下步骤: 打开ACCESS数据库,选择需要设置长文本的数据表。 在数据表中选择需要设置为长文本的字段,右键点击该字段名称,在弹出的菜单中选择“设计视图”。 在“设计视图”中,选择需要设置为长文本的字段,将其数据类型设为“Memo”。 保存后退出“设计视图”,重新打开数据表。 两条示例说明: 1.将“…

    other 2023年6月25日
    00
  • PHP中的函数嵌套层数限制分析

    PHP中的函数嵌套层数限制分析 在PHP中,函数嵌套层数限制是指在一个函数中调用另一个函数时,所能嵌套的层数的最大限制。这个限制是为了防止无限递归调用导致内存溢出或死循环的情况发生。在PHP中,默认的函数嵌套层数限制是100层,但可以通过修改php.ini文件来调整这个限制。 如何分析函数嵌套层数限制 要分析PHP中的函数嵌套层数限制,可以按照以下步骤进行:…

    other 2023年7月28日
    00
  • 整理CocosCreator常用知识点

    整理CocosCreator常用知识点攻略 1. CocosCreator简介 CocosCreator是一款流行的游戏开发引擎,它提供了一个可视化的编辑器和一套强大的工具,用于创建跨平台的游戏和应用程序。以下是一些常用的知识点: 2. 创建场景和节点 在CocosCreator中,场景是游戏中的一个独立环境,节点是场景中的元素。可以通过以下步骤创建场景和节…

    other 2023年7月29日
    00
  • C++实现动态数组功能

    下面是C++实现动态数组的完整攻略,包含以下几个步骤: 定义动态数组类 实现构造函数和析构函数 实现添加元素、删除元素和获取元素个数的方法 实现动态扩容功能 1. 定义动态数组类 我们可以使用C++的类来定义动态数组,代码如下: template<typename T> class DynamicArray { private: T *array…

    other 2023年6月25日
    00
  • ubuntu下 curl安装

    以下是关于“Ubuntu下curl安装”的完整攻略,包含两个示例。 背景 curl是一个命令行工具,可以用来传输数据,支持多种协议,包括HTTP、FTP、SMTP等。Ubuntu系统中,我们可以使用apt-get命令来安装curl。那么,在Ubuntu下,我们应该如何安装curl呢? 方法一:使用apt-get命令安装 在Ubuntu中,我们可以使用apt-…

    other 2023年5月9日
    00
  • Java SSM配置文件案例详解

    下面我将详细讲解”Java SSM配置文件案例详解”的完整攻略。 一、什么是Java SSM Java SSM是一种常见的Java Web开发框架,包含Spring框架、SpringMVC框架和MyBatis框架。其中,Spring框架主要用于实现Java Web应用的非业务逻辑处理,如AOP、IOC等,SpringMVC框架主要用于实现Java Web应用…

    other 2023年6月25日
    00
  • 64位简体中文 Win10最新版Build 10240.16425镜像下载

    64位简体中文 Win10最新版Build 10240.16425镜像下载攻略 简介 本攻略将详细介绍如何下载64位简体中文Win10最新版Build 10240.16425镜像。请按照以下步骤进行操作。 步骤 步骤一:访问官方网站 首先,打开你的浏览器,访问微软官方网站。你可以在浏览器的地址栏中输入https://www.microsoft.com,然后按…

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