<QtAlgorithms> 提供一組模板函式,針對 Qt 容器實作常用演算法,底層仰賴 STL 風格迭代器。C++ STL <algorithm> 同樣適用於 Qt 容器,兩者可混用無衝突。庫函式通常比手寫迴圈更高效、少錯誤。
qFind(begin, end, value):線性查找,回傳首個匹配迭代器,失敗回傳 endqBinaryFind(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):最小/最大值| 演算法 | 複雜度 | 適用場景 |
|---|---|---|
| qFind | O(n) | 無序容器、小資料量 |
| qBinaryFind | O(log n) | 已排序大型容器 |
| qSort | O(n log n) | 一般排序需求 |
| qStableSort | O(n log n) | 需保持相等元素順序 |
優先使用 Qt/STL 提供的演算法,僅在極特殊需求下手寫。