一、QList概述
QList是Qt框架中的一個容器類,用來存儲一組數據。它可以存儲各種數據類型,比如整數、字元串、結構體等等。同一份代碼可以在不同的平台上編譯運行,保證了代碼的可移植性。
二、QList的基本使用
1、定義和初始化列表
QList使用模板類的形式來定義,語法如下:
QList<類型> list;
其中「<類型>」表示我們要存儲的數據類型。例如,存儲整數類型的列表:
QList<int> list;
定義列表之後,我們可以使用一些初始化方法來給列表填入數據。
最簡單的初始化方法是使用集合初始化,例如:
QList<int> list = {1, 2, 3, 4, 5};
除此之外,還可以使用push_back()方法來插入數據,例如:
QList<int> list; list.push_back(1); list.push_back(2); list.push_back(3);
2、元素的訪問
QList提供了多種訪問元素的方法,例如使用下標訪問:
QList<int> list = {1, 2, 3, 4, 5}; int num = list[2]; // num等於3
除了使用下標訪問,還可以使用at()方法訪問:
QList<int> list = {1, 2, 3, 4, 5}; int num = list.at(2); // num等於3
如果我們要獲取第一個元素和最後一個元素,可以使用front()和back()方法:
QList<int> list = {1, 2, 3, 4, 5}; int first = list.front(); // first等於1 int last = list.back(); // last等於5
3、元素的修改和刪除
QList提供了多種修改元素和刪除元素的方法,例如使用下標修改元素:
QList<int> list = {1, 2, 3, 4, 5}; list[2] = 10;
使用remove()方法刪除元素:
QList<int> list = {1, 2, 3, 4, 5}; list.remove(2); // 刪除第3個元素,list變為{1, 2, 4, 5}
三、QList的高級用法
1、迭代器
QList提供了多種迭代器來訪問列表中的元素,例如:
QList<int> list = {1, 2, 3, 4, 5}; QList<int>::iterator it; for (it = list.begin(); it != list.end(); ++it) { // 使用it訪問當前元素,例如:int num = *it; }
其中,begin()和end()方法分別返回列表的首元素迭代器和尾元素迭代器。
2、排序
QList提供了sort()方法來對列表中的元素進行排序,例如:
QList<int> list = {5, 2, 3, 4, 1}; list.sort();
sort()方法默認按升序排序,如果需要降序排序可以使用qt的STL擴展排序函數:
QList<int> list = {5, 2, 3, 4, 1}; std::sort(list.begin(), list.end(), std::greater<int>());
3、過濾
QList提供了多種過濾方法來遍歷列表,例如使用Qt的lambda表達式實現的過濾:
QList<int> list = {1, 2, 3, 4, 5}; QList<int> filtered = list.filter([](int i) { return i % 2 == 0; }); // filtered等於{2, 4},只包含偶數
4、Map和Reduce
QList提供了map()和reduce()方法來對列表中的元素進行轉換和統計,例如:
QList<int> list = {1, 2, 3, 4, 5}; QList<int> mapped = list.map([](int i){ return i * 2; }); // mapped等於{2, 4, 6, 8, 10},每個元素都乘以2 QList<int> list = {1, 2, 3, 4, 5}; int sum = list.reduce([](int i, int j){ return i + j; }); // sum等於15,所有元素的和
四、使用實例
下面是一個使用QList實現學生成績管理的例子。
1、定義學生和成績數據類型
struct Student { QString name; int score; }; QList<Student> studentList;
2、添加學生並按成績排序
studentList.push_back({"John", 90}); studentList.push_back({"Mary", 80}); studentList.push_back({"Peter", 95}); // 按成績排序 studentList.sort([](const Student &s1, const Student &s2) { return s1.score > s2.score; });
3、輸出學生列表和平均分
// 遍歷學生列表 QList<Student>::iterator it; for (it = studentList.begin(); it != studentList.end(); ++it) { qDebug() << it->name << "score:" << it->score; } // 計算平均分 double sum = studentList.reduce(0, [](double i, const Student &s) { return i + s.score; }); double average = sum / studentList.size(); qDebug() << "average score:" << average;
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/297933.html