当前位置: 首页 > news >正文

Qt 顺序容器的详细介绍

一.顺序容器介绍

Qt 中的顺序容器包括 QVector、QList、QLinkedList 和 QStack。这些容器都提供了类似于 C++ STL 中的容器的功能,但是在 Qt 中提供了更多的功能和接口。

二.具体介绍 

1.QVector

QVector:是一个动态数组,可以在其末尾快速插入和删除元素,也可以通过索引访问元素。与 std::vector 相似,但 QVector 还提供了许多额外的功能,例如在指定位置插入元素、在指定位置删除元素等。示例代码如下:

#include <QCoreApplication>
#include <QDebug>
#include <QVector>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建一个 QVector 对象QVector<int> vec;// 添加元素到 QVectorvec.append(1);vec.append(2);vec.append(3);// 访问和修改元素qDebug() << "Element at index 0: " << vec[0];qDebug() << "Element at index 1: " << vec.at(1);vec[1] = 4;// 删除元素vec.removeLast();// 输出 QVector 的大小和内容qDebug() << "Size of QVector: " << vec.size();qDebug() << "Contents of QVector:";for (int i = 0; i < vec.size(); ++i) {qDebug() << vec[i];}// 使用迭代器遍历 QVectorqDebug() << "Contents of QVector using iterator:";QVector<int>::const_iterator it;for (it = vec.constBegin(); it != vec.constEnd(); ++it) {qDebug() << *it;}return a.exec();
}

2.QList 

QList:是一个双向链表,可以在其任意位置快速插入和删除元素。与 std::list 相似,但 QList 还提供了随机访问元素的功能。示例代码如下:

 

#include <QCoreApplication>
#include <QDebug>
#include <QList>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建一个 QList 对象QList<QString> list;// 添加元素到 QListlist.append("Apple");list.append("Banana");list.append("Cherry");// 访问和修改元素qDebug() << "Element at index 0: " << list[0];qDebug() << "Element at index 1: " << list.at(1);list[1] = "Blueberry";// 删除最后一个元素list.removeLast();// 输出 QList 的大小和内容qDebug() << "Size of QList: " << list.size();qDebug() << "Contents of QList:";for (int i = 0; i < list.size(); ++i) {qDebug() << list[i];}// 使用迭代器遍历 QListqDebug() << "Contents of QList using iterator:";QList<QString>::const_iterator it;for (it = list.constBegin(); it != list.constEnd(); ++it) {qDebug() << *it;}return a.exec();
}

 3.QLinkedList

QLinkedList:是一个双向链表,与 QList 相似,但 QLinkedList 不支持随机访问元素,只能通过迭代器访问元素。示例代码如下:

#include <QCoreApplication>
#include <QDebug>
#include <QLinkedList>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建一个 QLinkedList 对象QLinkedList<int> linkedList;// 添加元素到 QLinkedListlinkedList.append(1);linkedList.append(2);linkedList.append(3);// 访问和修改元素qDebug() << "Element at front: " << linkedList.front();qDebug() << "Element at back: " << linkedList.back();// 删除第一个元素linkedList.removeFirst();// 输出 QLinkedList 的大小和内容qDebug() << "Size of QLinkedList: " << linkedList.size();qDebug() << "Contents of QLinkedList:";for (int value : linkedList) {qDebug() << value;}// 使用迭代器遍历 QLinkedListqDebug() << "Contents of QLinkedList using iterator:";QLinkedList<int>::const_iterator it;for (it = linkedList.constBegin(); it != linkedList.constEnd(); ++it) {qDebug() << *it;}return a.exec();
}

4. QStack

 QStack:是一个栈,只能在栈顶插入和删除元素。与 std::stack 相似,但 QStack 还提供了许多额外的功能,例如获取栈顶元素、判断栈是否为空等。示例代码如下:

#include <QCoreApplication>
#include <QDebug>
#include <QStack>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建一个 QStack 对象QStack<QString> stack;// 入栈操作stack.push("Apple");stack.push("Banana");stack.push("Cherry");// 访问栈顶元素qDebug() << "Top element of the stack: " << stack.top();// 出栈操作stack.pop();// 输出栈的大小和内容qDebug() << "Size of the stack: " << stack.size();qDebug() << "Contents of the stack:";while (!stack.isEmpty()) {qDebug() << stack.pop();}return a.exec();
}

5.QQueue

QQueue 是 Qt 中的一个类,用于实现队列(queue)数据结构。队列是一种先进先出(FIFO)的数据结构,即最先进入队列的元素最先被取出。QQueue 提供了一组方法来实现队列的基本操作,如入队(enqueue)、出队(dequeue)、访问队首元素(head)、获取队列大小(size)等。

#include <QCoreApplication>
#include <QDebug>
#include <QQueue>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建一个 QQueue 对象QQueue<int> queue;// 入队操作queue.enqueue(1);queue.enqueue(2);queue.enqueue(3);// 访问队首元素qDebug() << "Front element of the queue: " << queue.head();// 出队操作queue.dequeue();// 输出队列的大小和内容qDebug() << "Size of the queue: " << queue.size();qDebug() << "Contents of the queue:";while (!queue.isEmpty()) {qDebug() << queue.dequeue();}return a.exec();
}

 三.使用场景分析

在选择使用哪种顺序容器时,可以考虑以下几个因素来区分它们的使用场景:

  1. 数据访问方式:如果需要频繁地在容器的末尾插入和删除元素,并且需要随机访问元素,可以选择使用 QVector。如果需要在容器的任意位置快速插入和删除元素,并且需要随机访问元素,可以选择使用 QList。如果只需要在容器的任意位置快速插入和删除元素,但不需要随机访问元素,可以选择使用 QLinkedList。如果只需要在栈顶插入和删除元素,可以选择使用 QStack。

  2. 数据规模:如果需要存储大量数据并且需要频繁地进行插入和删除操作,可以选择使用 QList 或 QLinkedList,因为它们在插入和删除操作上效率更高。如果数据规模较小或者需要频繁地进行随机访问操作,可以选择使用 QVector。

  3. 接口和功能需求:根据具体的需求选择合适的容器,例如是否需要支持随机访问、是否需要支持栈操作等。QVector 提供了更多的功能和接口,可以更灵活地操作数据,而 QList 和 QLinkedList 则提供了更高效的插入和删除操作。

综上所述,根据数据访问方式、数据规模和接口功能需求来选择合适的顺序容器,可以更好地满足实际的使用场景

http://www.lryc.cn/news/351056.html

相关文章:

  • 基于语音识别的智能电子病历(三)之 M*Modal
  • 理解Apache Storm的实际用途和应用场景
  • 【iceberg】数据湖与iceberg调研与实战
  • xrdp多用户多控制界面远程控制
  • git会忽略我们工作改动中的大小写
  • SSL 自定义证书创建过程
  • javaSwing飞机订票系统
  • 赶紧收藏!2024 年最常见 20道 Redis面试题(四)
  • 虚拟列表 vue-virtual-scroller 的使用
  • 前端基础入门三大核心之HTML篇:深入理解重绘与重排 —— 概念、区别与实战演练
  • 【C/C++笔试练习】TCP、IP广播、ARP协议、IP路由器、MAC协议、三次握手、TCP/IP、子网划分年、会抽奖、抄送列表
  • 线程的概念和控制
  • PHS树脂(聚对羟基苯乙烯)为KrF光刻胶专用树脂 本土企业具备百公斤级别量产能力
  • Python 机器学习 基础 之 数据表示与特征工程 【单变量非线性变换 / 自动化特征选择/利用专家知识】的简单说明
  • uniapp-自定义navigationBar
  • 多式联运奇迹:探索 GPT-4o 的尖端功能
  • 前端 CSS 经典:好看的标题动画
  • Vue项目打包优化(element+echarts+vue使用cdn)
  • 【ARM 嵌入式 C 入门及渐进 6.1 -- ARMv8 C 内嵌汇编写系统寄存器的函数实现】
  • ESP32基础应用之使用手机浏览器作为客户端与ESP32作为服务器进行通信
  • 【课后练习分享】Java用户注册界面设计和求三角形面积的图形界面程序
  • 三维空间坐标系变换(旋转平移)
  • OC笔记之foundation框架
  • Docker部署springboot包并联通MySQL
  • 多帧激光点云基于标定参数进行融合拼接
  • python数据类型之字符串
  • Vue3实战笔记(38)—粒子特效终章
  • 晶体振荡器
  • 单词可交互的弧形文本
  • Linux——进程信号(一)