首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Qt 學習之路 (49):Qt 通用演算法 詳解

     編輯:關於C語言

Qt 通用演算法概覽

<QtAlgorithms> 提供一組模板函式,針對 Qt 容器實作常用演算法,底層仰賴 STL 風格迭代器。C++ STL <algorithm> 同樣適用於 Qt 容器,兩者可混用無衝突。庫函式通常比手寫迴圈更高效、少錯誤。

核心演算法分類與用法

查找類

  • qFind(begin, end, value):線性查找,回傳首個匹配迭代器,失敗回傳 end
  • qBinaryFind(begin, end, value):二分查找,要求容器已排序,效率 O(log n)
QStringList list {"Emma", "Karl", "James", "Mariette"};
auto i = qFind(list.begin(), list.end(), "Karl");  // 指向 "Karl"
auto j = qFind(list.begin(), list.end(), "Petra"); // == list.end()

填充與複製

  • qFill(begin, end, value):區間填充指定值
  • qCopy(src_begin, src_end, dest_begin):元素複製,支援同容器內部複製(注意範圍不重疊)
QVector v(10);
qFill(v.begin(), v.begin()+5, 1009);  // 前 5 個 = 1009
qFill(v.end()-5, v.end(), 2013);      // 後 5 個 = 2013

QVector dest(list.size());
qCopy(list.begin(), list.end(), dest.begin());

排序類

  • qSort(begin, end):遞增排序,預設用 operator<
  • qSort(begin, end, qGreater<T>()):遞減排序
  • qSort(begin, end, custom_predicate):自訂比較函式(如大小寫不敏感字串比較)
  • qStableSort():穩定排序,相等元素保持原始相對順序
bool insensitiveLessThan(const QString& a, const QString& b) {
    return a.toLower() < b.toLower();
}
qSort(list.begin(), list.end(), insensitiveLessThan);

穩定排序應用場景:先按學號排序的成績單,再按成績重排,同分者維持學號順序。

記憶體管理與工具函式

  • qDeleteAll(container):對容器內所有指標執行 delete,執行後須呼叫 clear() 避免野指標
  • qSwap(a, b):交換兩物件值

<QtGlobal> 內建工具

此標頭檔被所有 Qt 標頭包含,無需額外引入:

  • qAbs(x):絕對值
  • qMin(a,b) / qMax(a,b):最小/最大值

效能與選擇建議

演算法複雜度適用場景
qFindO(n)無序容器、小資料量
qBinaryFindO(log n)已排序大型容器
qSortO(n log n)一般排序需求
qStableSortO(n log n)需保持相等元素順序

優先使用 Qt/STL 提供的演算法,僅在極特殊需求下手寫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved