Qt扫盲-QLinkedList理论总结

news2024/11/23 12:03:15

QLinkedList理论总结

  • 一、概述
  • 二、使用说明
    • 1. 声明链表
    • 2. 获取元素、链表信息
    • 3. 删除元素
    • 4. 添加元素
    • 5. 遍历元素

一、概述

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

以下是概述:
对于大多数用途,QList是Qt官方推荐使用的的类。QList基于索引的API比QLinkedList的基于迭代器的API更方便,而且它通常比QVector更快,因为它在内存中存储项目的方式(详见算法复杂度)。而且QList还扩展到可执行文件中的代码更少。

如果你需要一个真正的链表,保证在链表中间的常量时间插入,并且迭代器指向项而不是索引,请使用QLinkedList。因为我们知道C语言里面的链表都是用指针来链接的的,没有索引。所以 QLinkedList 只能用迭代的方式来获取到。

如果需要每个元素在容器里面占用相邻的内存位置,请使用QVector。

二、使用说明

1. 声明链表

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

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

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

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

2. 获取元素、链表信息

如果想获取链表中的第一项或最后一项,用 first()和 last() 或者使用 front() 和 back()。
他们没啥区别,其实就是 front() 和 back() 只是 STL 函数的使用习惯的封装,和 first()和 last() 功能一样。

  • contains(const T &value):判断链表里面有没有某个元素
  • count(const T &value) const :获取某个元素的次数还有一个重载函数,直接获取链表元素个数
  • size():获取元素列表大小
  • startsWith(const T &value) :就是看是不是以某个元素开头
  • isEmpty():判断是不是空链表
  • toStdList() const:返回一个C++标准的列表-> std::list

3. 删除元素

如果想从列表的任何一端删除一个项,请使用removeFirst()或removeLast()。pop_back() 和 pop_front()也可以的。

如果想删除列表中所有给定值的出现,请使用removeAll()。
一个常见的需求是删除列表中的第一项或最后一项,并对其进行处理。为此,QLinkedList提供了takeFirst()和takeLast()。

下面是一个循环,每次从列表中删除一个项,并对它们调用delete:

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

**QLinkedList的值类型必须是可赋值的数据类型。这涵盖了大多数常用的数据类型,但编译器不允许您将QWidget存储为值;相反,存储一个QWidget ***。一些函数有额外的要求;例如,contains()和removeAll()期望值类型支持operator==()。这些需求在每个功能的基础上被记录下来。

4. 添加元素

和QList的功能基本一致的。

  • append(const T &value): 尾巴上添加元素
  • prepend(const T &value):头前面添加元素
  • push_back(const T &value):和 append 一样功能
  • push_front(const T &value):和 prepend 一样功能
  • += :重载运算,可以把两个链表合并在一起

5. 遍历元素

如果要在列表中间插入、修改或删除项,必须使用迭代器。QLinkedList提供了java风格的迭代器(QLinkedListIterator 和QMutableLinkedListIterator )和 STL 风格的迭代器(QLinkedList::const_iterator和QLinkedList::iterator)。有关详细信息,请参阅这些类的文档。STL 的其实就是C++基础语法就不说了
看看 java 这个风格的,所谓前向遍历从 头 head -> 尾巴 tail ,后向遍历其实就是 从 尾巴 tail -> 头 head
在这里插入图片描述

  • QLinkedListIterator
    简单来说就是只读的迭代器,不允许修改元素,主要用的就是 hasNext() 前向遍历,hasPrevious() 反向遍历

简单的前向遍历如下:

  QLinkedList<float> list;
  ...
  QLinkedListIterator<float> i(list);
  while (i.hasNext())
      qDebug() << i.next();

简单的后项向遍历如下:

  QLinkedListIterator<float> i(list);
  i.toBack();//把迭代器方向变成尾巴
  while (i.hasPrevious())
      qDebug() << i.previous();
  • QMutableLinkedListIterator
    简单来说就是可读可写的迭代器,一样支持前后迭代, hasNext() 前向遍历,hasPrevious() 反向遍历。
    同时呢,用 remove() 删除节点,用 insert() 插入节点,用setValue()来修改节点值。

简单的前向遍历如下:

  QLinkedList<float> list;
  ...
  QMutableLinkedListIterator<float> i(list);
  while (i.hasNext())
      qDebug() << i.next();

简单的后项向遍历如下:

  QMutableLinkedListIterator<float> i(list);
  i.toBack();
  while (i.hasPrevious())
      qDebug() << i.previous();

简单的增删改

  QMutableLinkedListIterator<int> i(list);
  while (i.hasNext()) {
      int val = i.next();
      if (val < 0) {
          i.setValue(-val);
      } else if (val == 0) {
          i.remove();
      }
  }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/138797.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript刷LeetCode模板技巧篇(一)

虽然很多人都觉得前端算法弱&#xff0c;但其实 JavaScript 也可以刷题啊&#xff01;最近两个月断断续续刷完了 leetcode 前 200 的 middle hard &#xff0c;总结了一些刷题常用的模板代码。 常用函数 包括打印函数和一些数学函数。 const _max Math.max.bind(Math); co…

【C++】stack和queue

文章目录前言&#xff08;重点&#xff09;一、stack1、 stack的介绍2、queue的使用3、stack的模拟实现二、queue1、queue的介绍2、queue的使用3、queue的模拟实现三、容器适配器1、什么是容器适配器呢&#xff1f;2、STL标准库中stack和queue的底层结构四、deque1、deque的原理…

设计模式之单例模式(懒汉, 饿汉)

文章目录一. 单例模式概述二. 单例模式的实现1. 饿汉模式2. 懒汉模式一. 单例模式概述 单例模式是一种常用的软件设计模式, 该模式的主要目的是确保某一个类在内存中只能有一个实例对象, 通过单例模式的方法创建的类在当前进程中只有一个实例对象. 常见的单例模式有两种: 饿…

制作系统安装(微软操作系统系统)

系统安装制作步骤 准备工具&#xff1a;笔记本电脑 8G以上u盘 镜像ISO文件 微软系统下载&#xff1a;https://msdn.itellyou.cn/ 复制连接到迅雷下载&#xff0c;进行系统镜像下载。 U盘制作工具下载和制作&#xff1a; 制作工具网站下载&#xff1a;http://rufus.ie/zh/ 准…

MySQL避免插入重复数据

新建一张测试表&#xff0c;有三个字段&#xff0c;自增主键id、创建了唯一索引的user_name、以及普通字段address。然后插入一条数据作为原始数据&#xff0c;如下所示 1、insert ignore into 基于索引字段数据进行判断&#xff0c;如果索引数据存在&#xff0c;那么忽略本…

CSS单行/多行文本溢出隐藏

前言 在日常开发展示页面&#xff0c;如果一段文本的数量过长&#xff0c;受制于元素宽度的因素&#xff0c;有可能不能完全显示&#xff0c;为了提高用户的使用体验&#xff0c;这个时候就需要我们把溢出的文本显示成省略号 对于文本的溢出&#xff0c;我们可以分成两种形式…

jetson nano安装远程桌面,Qt,pytorch,tensorflow,virtualenv等

文章目录基于jetPack版本4.6.1一.基础组件配置检查二.基础组件安装1.安装pip32.安装python-opencv与机器学习常用包3.安装pytorch方法1&#xff08;失败&#xff09;方法2&#xff08;成功&#xff09;4.安装tensorflow-gpu5.安装QT6.板载摄像头使用7.安装中文输入法8.安装截图…

网络爬虫入门到实战

简介 数据采集文章 开始 入门程序 环境准备 pip3 install beautifulsoup4 基本操作 from urllib.request import urlopen from bs4 import BeautifulSouphtml urlopen("http://www.baidu.com") # print(html.read()) (打印html完整内容) bsObj BeautifulSou…

服务熔断和服务降级

服务之间是可以相互调用的&#xff0c;如果底层的服务出现了问题&#xff0c;那么他的上层服务也就会出问题 为了解决分布式系统的雪崩问题&#xff0c;SpringCloud提供了Hystrix熔断器组件 服务降级 服务降级并不会直接返回错误&#xff0c;而是提供一个补救措施&#xff0c…

简洁明了的ReentrantReadWriteLock总结

&#x1f473;我亲爱的各位大佬们好 ♨️本篇文章记录的为 ReentrantReadWriteLock 相关内容&#xff0c;适合在学Java的小白,帮助新手快速上手,也适合复习中&#xff0c;面试中的大佬&#x1f649;&#x1f649;&#x1f649;。 ♨️如果文章有什么需要改进的地方还请大佬不吝…

王爽汇编(第四版)实验八

文章目录前言一、题目二、分析1.初始时指令存储情况2.运行时指令存储情况总结前言本文是学习王爽老师《汇编语言》(第四版)第九章 实验8 分析一个奇怪的程序 时的相关代码及分析。一、题目分析程序&#xff0c;思考程序是否可以正确返回&#xff1b;运行后再思考&#xff0c;为…

胭脂茉莉点评推荐上海大学法院李本教授诗集《秋月曲》诗歌6首

胭脂茉莉&#xff08;右&#xff09;和李本教授&#xff08;左&#xff09;于2019年冬天在上海留影胭脂茉莉 &#xff0c;女 &#xff0c;江苏人&#xff0c;年少习诗&#xff0c;作家、诗人。评论及随笔见诸媒体及报刊 。诗歌先后被选编入海内外多种选本及刊物&#xff0c;主要…

【我的渲染技术进阶之旅】glfw库简单介绍

文章目录一、为啥去了解glfw?二、glfw相关资料三、glfw简单示例1. 引入 GLFW 头文件2. 初始化和终止 GLFW3. 设置错误回调4. 创建窗口和上下文5.使 OpenGL 上下文成为当前上下文6. 检查窗口关闭标志7.接收输入事件8.使用 OpenGL 渲染9. 读取定时器10.交换缓冲区11. 处理事件12…

【C++】了解设计模式,模拟实现栈和队列

文章目录一.设计模式二.stack的模拟实现三.queue的模拟实现四.了解deque五、题目练习一.设计模式 设计模式有很多种&#xff0c;根据设计模式的参考书 Design Patterns - Elements of Reusable Object-Oriented Software&#xff08;中文译名&#xff1a;设计模式 - 可复用的面…

SpringBoot+VUE前后端分离项目学习笔记 - 【11 SpringBoot代码生成器_MybatisPlus】

引入mp生成器依赖 pom.xml <!-- 代码生成器 --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.1</version> </dependency> <dependency><grou…

RabbitMQ 单机安装-CentOS

RabbitMQ 单机安装-CentOS 官网查看RabbitMQ和对应的Erlang版本 进入 RabbitMQ 官网 &#xff0c;点击 顶上的 Get Started 点击Download Installation 点击左侧的Erlang Versions 查看对应版本 根据自己需要安装的RabbitMQ版本&#xff0c;找到需要Erlang的版本。 下…

什么是Spring Cloud?Spring Cloud介绍

简介Spring Cloud项目的官方网址&#xff1a;https://projects.spring.io/spring-cloud/Spring Cloud 并不是一个项目&#xff0c;而是一组项目的集合。在 Spring Cloud中包含了很多的子项目&#xff0c;每一个子项目都是一种微服务开发过程中遇到的问题的一种解决方案。它利用…

红中群内每日分享题目解析——第一天

目录 题目一&#xff1a;最后一次用的英雄 题目二&#xff1a;狗哥去哪 摩斯密码 题目三&#xff1a;黑丝白丝还有什么丝 题目一&#xff1a;最后一次用的英雄 ​​​​​​ 感谢我徒弟(不是 告知并解出此题 杭椒的博客_CSDN博客-网安经验分享,网络安全工具,CISP-PTE备考笔记…

音视频开发常用工具

目录 1.VLC播放器简介 1.1 VLC 播放器 1.2 VLC的功能列表 1.3 VLC播放网络串流 1.4 VLC作为流媒体服务器 2. MediaInfo简介 2.1 MediaInfo 2.1.1 获取多媒体文件信息 2.1.2 支持的格式 2.1.3 .查看方式 2.1.4 国际化 2.2 MediaInfo使用方法 2.3 MediaInfo参数说明 3…

将powershell、cmd和vscode终端的编码永久修改成utf-8

powershell修改方法 1、以管理员身份打开powershe New-Item $PROFILE -ItemType File -Force 2、打开C盘&#xff0c;找到我的文档中的WindowsPowerShell文件夹 3、编辑这个ps1文件&#xff08;默认是空的&#xff09;&#xff0c;加上以下代码 $OutputEncoding [console…