一、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/zh-hk/n/332170.html