Qt QVector类

Qt中的QVector是一个模板类,用于存储和操作动态数组。它类似于C++标准库中的std::vector,但提供了更多的Qt特有的功能和便利性,更适合在Qt应用中使用。

创建和初始化

cpp 复制代码
// 1)默认构造函数:创建一个空的QVector对象。
QVector<int> vec1;

// 2)指定大小的构造函数:创建一个指定大小的QVector,所有元素都初始化为默认值(对于数值类型,通常是0)。
QVector<int> vec2(10); // 创建一个大小为10的QVector,所有元素初始化为0

// 3)指定大小和初始值的构造函数:创建一个指定大小并指定初始值的QVector。
QVector<int> vec3(10, 5); // 创建一个大小为10的QVector,所有元素初始化为5

// 4)使用std::initializer_list初始化:使用初始化列表来创建并初始化QVector。
QVector<int> vec4 = {1, 2, 3, 4, 5};

// 5)拷贝构造函数:使用另一个QVector初始化
QVector<int> vec5(vec4); // 使用vec4初始化vec5

// 6)从指针和大小初始化:使用C++数组初始化QVector。
int array[] = {1, 2, 3, 4, 5}; 
QVector<int> vec6(array, array + 5);

// 7)使用std::vector初始化:将std::vector转换为QVector
std::vector<int> stdVec = {1, 2, 3, 4, 5}; 
QVector<int> vec7 = QVector<int>::fromStdVector(stdVec);

// 8)使用QList初始化:将QList转换为QVector。
QList<int> list = {1, 2, 3, 4, 5};
QVector<int> vec8 = QVector<int>::fromList(list);

元素访问

cpp 复制代码
// 1)下标访问:
int value = vec[0]; // 获取第一个元素

// 2)迭代器访问:
for (QVector<int>::iterator it = vec.begin(); it != vec.end(); ++it) { 
    qDebug() << *it;
}

// 3)常量迭代器访问:
for (QVector<int>::const_iterator it = vec.cbegin(); it != vec.cend(); ++it) { 
    qDebug() << *it; 
}

添加和移除元素

cpp 复制代码
// 1)添加元素:
append(const T &value):在末尾添加一个元素。
prepend(const T &value):在开头添加一个元素。
insert(int i, const T &value):在指定位置插入一个元素。

// 2)移除元素:
remove(int i):移除指定位置的元素。
remove(const T &value):移除所有等于指定值的元素。
removeLast():移除最后一个元素。
clear():移除所有元素。

其他操作

cpp 复制代码
size():返回QVector中元素的数量。
capacity():返回QVector的容量,即它分配的内存量。
常规排序:可以使用std::sort或Qt的排序函数(如qSort)对QVector进行排序。
isEmpty():检查QVector是否为空
contains():检查QVector是否包含某个元素

延申:QVector 作为一种动态数组的实现,其"动态"性质主要体现在以下几个方面:

  1. 动态大小调整 :与静态数组(其大小在编译时确定且不可更改)不同,QVector 的大小是动态的,可以在运行时根据需要增加或减少。当你向QVector添加元素时,如果当前存储空间不足,QVector会自动重新分配一个更大的内存块,并将旧元素(如果有的话)复制到新位置。同样,如果元素被移除且剩余元素数量远低于当前分配的空间,QVector可能会减少其占用的内存。
  2. 自动内存管理 :QVector 负责管理其内部存储的元素的内存。这意味着你不需要手动分配或释放内存来存储元素;QVector 会为你处理这些细节。当你不再需要QVector及其内容时,只需让QVector对象超出作用域或被删除,Qt的内存管理机制就会自动回收其占用的内存。这种自动的内存管理大大简化了动态数组的使用,减少了内存泄漏和越界访问的风险。
  3. 灵活的元素访问 :虽然QVector在物理内存中连续存储元素,提供了高效的随机访问(通过索引直接访问元素),但它也支持灵活的插入和删除操作。你可以在QVector的任何位置插入或删除元素,而不需要像静态数组那样进行复杂的元素移动操作(尽管这些操作可能涉及元素的复制和内存重新分配)。
相关推荐
用户8055336980316 小时前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner17 小时前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz6 天前
QML Hello World 入门示例
qt
xcyxiner9 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner9 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner10 天前
DicomViewer (添加模型类)3
qt
xcyxiner10 天前
DicomViewer (目录调整) 2
qt
xcyxiner11 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
桥田智能12 天前
桥田智能 QT-650S:面向白车身焊装的 800kg 重载快换解决方案
开发语言·qt·系统架构
森G13 天前
75、服务器源码解析---------云视频服务项目
linux·服务器·网络·c++·qt