文章目录
参考
原创:泡沫o0
Qt QList 详解:从底层原理到高级用法
深入剖析 Qt QMap:原理、应用与技巧
Qt QVector 详解:从底层原理到高级用法
Qt QQueue 详解:从底层原理到高级用法
一、QList
QList 是 Qt 提供的一种动态数组容器,它允许在运行时动态添加、删除和修改元素。QList 采用连续的内存块来存储数据,支持快速的随机访问和高效的内存使用。在 Qt 应用开发中,QList 是一种常见且实用的数据结构,可以用于各种场景,如列表视图、数据存储和传输等
1. QList 的应用场景
QList 适用于许多应用场景,以下是一些常见的例子:
- 列表视图:在 Qt 的图形用户界面开发中,QList 可用于存储和管理列表视图(如 QListWidget 和 QListView)中的数据。QList 提供了简单且高效的方法来添加、删除和更新列表项。
- 数据存储和传输:QList 可用于存储和传输各种类型的数据,如配置文件、用户设置、数据库查询结果等。QList 为这些场景提供了一种通用且高效的数据结构。
- 实现算法和功能:在实现算法和功能时,QList 可作为一个通用的数据容器,用于存储和操作数据。例如,QList 可用于实现排序算法、查找算法等。
2. QList的常用接口
QList 是 Qt 框架中的一个容器类,用于存储和管理对象列表。以下是 QList 的一些常用接口及其详细介绍:
-
构造函数和析构函数:
- QList():构造一个空的列表;
- QList(const QList &other):拷贝构造函数,用另一个 QList 对象来构造一个新的列表;
- ~QList():析构函数,清除列表及其内容。
-
添加和插入元素:
- void append(const T &value):在列表末尾添加一个元素;
- void prepend(const T &value):在列表开头添加一个元素;
- void insert(int i, const T &value):在索引 i 处插入一个元素。
#include "QListTest.h"
#include <QtWidgets/QApplication>
#include <QList>
#include <QDebug>
//防止中文乱码
#pragma execution_character_set("utf-8")
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//创建一个空的list
QList<int> List;
//添加元素(在列表末尾)
List.append(1);
List.append(2);
List.append(3);
List.append(4);
List.append(5);
//添加元素(在列表开头)
List.prepend(6);
//在指定索引插入一个元素,第一个是索引值,第二个是要插入的元素
List.insert(0, 7);
qDebug() << "list 的值为" << List;
QListTest w;
w.show();
return a.exec();
}
- 删除元素:
- void removeAt(int i):删除索引 i 处的元素;
- T takeAt(int i):删除并返回索引 i 处的元素;
- void removeFirst():删除并返回第一个元素;
- void removeLast():删除并返回最后一个元素;
- int removeAll(const T &value):删除所有与给定值相等的元素;
- void clear():清空列表。
#include "QListTest.h"
#include <QtWidgets/QApplication>
#include <QList>
#include <QDebug>
//防止中文乱码
#pragma execution_character_set("utf-8")
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//创建一个空的list
QList<int> List;
//添加元素(在列表末尾)
List.append(1);
List.append(2);
List.append(3);
List.append(4);
List.append(5);
List.append(4);
List.append(5);
List.append(4);
List.append(4);
List.append(4);
//添加元素(在列表开头)
List.prepend(6);
//在指定索引插入一个元素,第一个是索引值,第二个是要插入的元素
List.insert(0, 7);
qDebug() << "list 的值为" << List;
List.removeAt(2);
qDebug() << "删除第二个元素后list 的值为" << List;
qDebug() << "删除并返回索引 1 处的元素" << List.takeAt(0);
List.removeFirst();
qDebug() << "删除并返回第一个元素" << List;
List.removeLast();
qDebug() << "删除并返回最后一个元素" << List;
//删除所有和给定值相等的元素,并返回与给定值元素相等元素的个数
qDebug() << "删除所有与给定值相等的元素" << List.removeAll(4);
//清空列表
List.clear();
QListTest w;
w.show();
return a.exec();
}
- 访问和修改元素:
- T &operator[](int i):返回索引 i 处的元素的引用;
- const T &operator[](int i) const:返回索引 i 处的元素的常量引用;
- T &at(int i):返回索引 i 处的元素的引用,但不允许修改;
- T &first():返回列表中的第一个元素的引用;
- const T &first() const:返回列表中的第一个元素的常量引用;
- T &last():返回列表中的最后一个元素的引用;
- const T &last() const:返回列表中的最后一个元素的常量引用。
#include "QListTest.h"
#include <QtWidgets/QApplication>
#include <QList>
#include <QDebug>
//防止中文乱码
#pragma execution_character_set("utf-8")
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//创建一个空的list
QList<int> List;
//1、添加和插入元素
//添加元素(在列表末尾)
List.append(1);
List.append(2);
List.append(3);
List.append(4);
List.append(5);
qDebug() << "list 的值为" << List;
//3、访问和修改元素
qDebug() << "返回索引 i 处的元素的引用" << List.operator[](4);
qDebug() << "返回索引 i 处的元素的引用,但不允许修改" << List.at(1);
qDebug() << "返回列表中的第一个元素的引用" << List.first();
qDebug() << "返回列表中的最后一个元素的引用;" << List.last();
//清空列表
List.clear();
QListTest w;
w.show();
return a.exec();
}
- 列表大小和容量:
- int size() const:返回列表中的元素个数;
- bool isEmpty() const:判断列表是否为空;
- int capacity() const:返回列表的容量;
- void reserve(int size):预留给定大小的空间;
- void squeeze():释放未使用的空间。