您的位置:

QVector遍历详解

一、QVector数据结构简介

QVector是Qt框架提供的、基于数组实现的动态数据容器,也是Qt中最常用的数据容器之一。QVector的基本特点包括:

1. QVector自动管理其数组大小和存储;

2. 在QVector中,元素的访问、修改非常快速,类似于原始数组的操作;

3. QVector支持常规操作,如插入,删除,查找等。

一般而言,QVector应用于对内存占用要求较高,需要频繁访问其中元素的场景。

二、QVector基本操作

1. QVector的定义


// 不指定初始容量的方式,定义一个空的QVector
QVector<int> vec1;

// 指定初始容量的方式,定义一个具有10个元素的QVector
QVector<int> vec2(10);

// 将一个 QVector 用另一个 QVector 初始化
QVector<int> vec3(vec2); 

2. 向QVector添加元素

添加元素,可以使用QVector类的append()和push_back()函数。例如:


// 向vec1末尾添加一个元素1
vec1.append(1);

// 向vec1末尾添加一个元素2
vec1.push_back(2);

3. 获取元素

在QVector中,可以通过下标operator[]或者at()函数获取元素的值。例如:


// 获取元素1
int elem1 = vec1[0];

// 获取元素2
int elem2 = vec1.at(1);

4. 修改元素

修改一个元素,可以通过下标operator[]或者replace()函数。例如:


// 将vec1的第一个元素修改为3
vec1[0] = 3;

// 使用replace函数,将vec1的末尾元素修改为4
vec1.replace(vec1.size()-1, 4);

5. 删除元素

QVector提供了remove()和removeAt()函数用于删除其中的元素。例如:


// 删除vec1中的第一个元素
vec1.removeAt(0);

// 删除vec1中的最后一个元素
vec1.removeAt(vec1.size() - 1);

6. 清空QVector

QVector提供了clear()函数用于清空其中的元素,例如:


// 清空vec1
vec1.clear();

三、QVector遍历

1. 迭代器遍历

可以使用迭代器进行遍历QVector中的元素。Tpyename指定元素类型。例如:


// 迭代vec1中的元素
QVector<int>::iterator iter;
for(iter = vec1.begin(); iter != vec1.end(); ++iter)
{
    // 执行迭代时所需的任务
    int elem = *iter;
}

2. 基于下标的遍历

使用下标进行QVector的遍历,需要确定区间的索引范围,例如:


// 基于下标的遍历
for(int i = 0; i < vec1.size(); ++i)
{
    // 执行每个元素所需的任务。
    int elem = vec1[i];
}

3. 基于Java风格的遍历

Qt 5 开始提供了对基于Java的迭代器的支持。这种迭代器可以使用 auto 关键字来初始化,例如:


// Java风格遍历vec1中的元素
for(int elem : vec1)
{
    // 执行每个元素所需的任务。
}

4. 基于STL风格的遍历

可以把QVector转换成std::vector,进而使用基于STL风格的遍历,例如:


// 将vec1转换成 std::vector
std::vector<int> vec = std::vector<int>(vec1.begin(), vec1.end());

// STL风格遍历vec
for(int elem: vec)
{
    // 执行每个元素所需的任务。
}

四、小结

在Qt中,QVector是非常常用的数据容器,由于QVector基于动态数组实现,因此具有较快的元素访问和修改能力。本文从QVector基本操作入手,详细介绍了QVector的定义、添加元素、获取元素、修改元素、删除元素和清空QVector等基本操作,然后着重介绍了QVector遍历的四种方式:基于迭代器,基于下标,基于Java风格的迭代器和基于STL风格的迭代器。通过本文的介绍,希望大家对QVector的遍历方式有了更深刻的认识,能够灵活地应用到实践中去。