一、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的遍歷方式有了更深刻的認識,能夠靈活地應用到實踐中去。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/289537.html