はい第2回目、qSort,qDeleteAllなどのQtAlgorithms内の関数を使用していきます。
QtAlgorithmsヘッダ内にはジェネリックなアルゴリズムを実装したグローバルテンプレート関数が宣言されています。この関数を使用することにより、よりコンテナクラスの扱いが楽になります。暗記する必要はないでしょうが、何があるかぐらいは覚えておいて損はないでしょう。(リファレンス)
サンプルはC++ GUI Programming with Qt4 263ページからものを少し変更し使用します。
そして、いつものようにQtCreaterの使用を前提とします。(QtCreaterなどの使い方は ”Qtをはじめよう" を見てください。)
ではさっそくコードを
(QtAlgorithms : qSort)
QVector<QString> vect(3); vect[0] = "3"; vect[1] = "2"; vect[2] = "1"; //①昇順ソート qSort(vect.begin(), vect.end()); //②独自ソート(この場合降順ソート) qSort(vect.begin(), vect.end(), qGreater<QString>());まずはqSortです。コンテナ内の要素をソートします。通常は①の昇順ソートのほうを使いますが、コンテナ内の型によってはソートのやり方を変更しなければならない場合があるかと思います。
その場合は②の3つの引数を使用したほうを使います。②ではすでに定義されているqGreater関数を使用していますが、以下のような感じで独自の関数を使用できます。
//独自の比較用関数 bool Sample(const QString &str1, const QString &str1) { return str1.toLower() < str2.toLower(); } //... qSort(list.begin(), list.end(), Sample);またQtAlgorithmsヘッダ内にはqStableSort()というのもあります。qSort()と同じ昇順ソートですが、同じ要素の順序がそのままとなるという特徴があります。状況に応じて使い分けてください。
(QtAlgorithms : qDeleteAll)
//... qDeleteAll(list); list.clear(); //...
次はqDeleteAllです。コンテナの要素全てにdeleteを実行します。つまりポインタ型以外は実行の意味がありません。この関数を呼び出しただけでは要素自体は残っています。ですのでclear()で最後に全要素を削除しています。このqDeleteAllの実行だけでは要素自体は残るという点は注意してください。
(QtAlgorithms : qSwap)
QVector<QString> vect(3); vect[0] = "3"; vect[1] = "2"; vect[2] = "1"; qSwap(vect[0], vect[2]); //vectは最終的に[ "1", "2", "3" ]となる。
最後はqSwapです。その名のとおり値の交換です。vect[0]と[2]の値を交換しています。
その他様々な便利な関数が定義されていますので、その辺りはリファレンスを参照してみてください。
以上です。