Qt QVector详解

一、QVector简介

Qt QVector是一个动态数组模板类。它类似于C++ STL vector,但是具有更高的效率和更低的空间占用率。QVector在内部使用一个指向数组以及数组容量和大小的指针来表示动态数组。当数组存储容量不足时,QVector会自动扩展容量以便更多的数据。

二、QVector的基本操作

1. QVector的创建

创建QVector的最简单的方法是使用默认构造函数:

QVector<int> vector1; //创建一个空的整数数组

也可以使用列表初始化:

QVector<QString> vector2 {"Apple", "Banana", "Cherry"};

2. QVector的插入与删除

可以使用append()和prepend()在数组开头或结尾插入元素。还有insert()可以在数组中插入元素:

QVector<int> vector {1, 2, 3};
vector.append(4); //在末尾插入4
vector.prepend(0); //在头部插入0
vector.insert(2, 10); //在第3个位置插入值为10的元素

通过remove()可以删除数组中的元素:

vector.remove(1); //删除第2个元素
vector.removeFirst(); //删除第1个元素
vector.removeLast(); //删除最后一个元素

3. QVector的访问

QVector支持通过下标访问元素,也可以使用at()方法以及迭代器iterator来访问元素。vector.first()和vector.last()可以分别返回数组的第一个和最后一个元素。

QVector<QString> vector {"Apple", "Banana", "Cherry"};
QString item1 = vector[0]; //访问第一个元素
QString item2 = vector.at(1); //访问第二个元素
for (auto i = vector.constBegin(); i != vector.constEnd(); ++i) {
    //使用const迭代器访问整数数组
    cout << *i << endl;
}

4. QVector的遍历

QVector可以使用迭代器iterator进行遍历。您还可以使用foreach循环来遍历数组:

QVector<int> vector {1, 2, 3, 4, 5};
foreach(int item, vector) { //使用foreach遍历数组
    cout << item << endl;
}

三、QVector高级操作

1. QVector的排序

QVector支持使用qSort()方法进行排序,也可以使用STL的std::sort()来进行排序:

QVector<int> vector {3, 1, 4, 2, 5};
qSort(vector); //排序vector
for (int i = 0; i < vector.size(); ++i) {
    cout << vector[i] << endl;
}

2. QVector的拷贝

QVector支持使用copy()或operator=()方法创建数组的浅拷贝和深拷贝:

QVector<int> vector {1, 2, 3};
QVector<int> vector2 = vector; //使用operator=()方法进行深拷贝
QVector<int> vector3 = vector2.copy(); //使用copy()方法进行浅拷贝

3. QVector的容量调整

QVector会自动调整容量以便更多的数据,但是在某些情况下可能需要手动调整容量。可以使用reserve()方法来分配数组的存储空间:

QVector<int> vector;
vector.reserve(1000); //分配存储空间以容纳至少1000个元素

4. QVector的异常处理

QVector检查越界错误,并在发生错误时调用qFatal()方法结束程序。您可以通过设置全局QT_NO_EXCEPTIONS宏来禁用异常处理机制。同时还可以使用at()方法而不是使用下标来访问元素,以避免越界。此外,还可以使用value()方法来访问特定位置的元素,如果索引越界,则返回默认值:

QVector<int> vector {1, 2, 3};
try {
    int item = vector.at(4); //访问越界元素时抛出一个异常
} catch (const std::out_of_range& e) {
    //越界异常
    cout << e.what() << endl;
}
int defaultValue = -1;
int item2 = vector.value(4, defaultValue); //使用默认值来访问第5个元素

四、QVector实例代码

#include <QCoreApplication>
#include <QDebug>
#include <QVector>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    //创建一个空的字符串数组
    QVector<QString> vector1;

    //将字符串插入到数组中
    vector1.append("Apple");
    vector1.append("Banana");
    vector1.append("Cherry");

    //遍历数组
    foreach(QString fruit, vector1) {
        qDebug() << fruit;
    }

    //在数组中查找酸奶的索引
    if (vector1.contains("Yogurt")) {
        qDebug() << "Found Yogurt!";
    } else {
        qDebug() << "Did not find Yogurt!";
    }

    //创建一个整型数组
    QVector<int> vector2;

    //将整数插入到数组中
    vector2.append(1);
    vector2.append(2);
    vector2.append(3);
    vector2.append(4);
    vector2.append(5);

    //获取数组的第二个元素(下标为1)
    int secondItem = vector2.at(1);

    //遍历数组并求和
    int sum = 0;
    foreach(int number, vector2) {
        sum += number;
    }

    //排序数组
    qSort(vector2);

    //输出数组的所有元素
    for (int i = 0; i < vector2.size(); ++i) {
        qDebug() << vector2[i];
    }

    return a.exec();
}

原创文章,作者:HLWCL,如若转载,请注明出处:https://www.506064.com/n/332170.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
HLWCL的头像HLWCL
上一篇 2025-01-21 17:30
下一篇 2025-01-21 17:30

相关推荐

  • Qt雷达探测教程

    本文主要介绍如何使用Qt开发雷达探测程序,并展示一个简单的雷达探测示例。 一、环境准备 在开始本教程之前,需要确保你的开发环境已经安装Qt和Qt Creator。如果没有安装,可以…

    编程 2025-04-29
  • Qt State Machine与状态机模式

    本文将介绍Qt State Machine和状态机模式在Qt中的实现。Qt提供了QStateMachine和QState两个类,可以方便地实现状态机模式,并且能有效地处理复杂的、多…

    编程 2025-04-27
  • Python中的Qt库

    Qt库是一个跨平台的C++图形用户界面(GUI)工具包。它提供了丰富的界面控件和处理系统事件的功能,可以轻松创建交互界面、图形化应用和多媒体应用。而Python中的Qt库则是Qt的…

    编程 2025-04-27
  • xmake qt:构建Qt应用的全流程解决方案

    本文将会详细阐述xmake qt的使用方法以及其能够解决的问题。针对Qt应用开发中的各种困境,xmake提供了一整套的解决方案,包括自动构建、依赖管理、部署打包等,极大地提高了开发…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • C语言贪吃蛇详解

    一、数据结构和算法 C语言贪吃蛇主要运用了以下数据结构和算法: 1. 链表 typedef struct body { int x; int y; struct body *nex…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25

发表回复

登录后才能评论