ユニバーサルアルゴリズム:3つの容器のQtの

<QtAlgorithm>ヘッダ・ファイルに、Qtは非常に一般的に使用されるアルゴリズムは、容器上で使用することができるされるグローバルテンプレート関数の数を提供します。我々はQListに、QLinkedList、QVector、QMapとQHashを含む任意の申し出のSTLスタイルのイテレータのコンテナクラス、上でこれらのアルゴリズムを使用することができます。あなたがターゲットプラットフォーム上でSTLを使用できる場合は、STLは複数のアルゴリズム、およびアルゴリズムを提供するため、QtはQtは唯一のそれらの最も重要なのいくつかを提供し、これらのアルゴリズムの代わりに、STLのアルゴリズムを使用することができます。ここでのプレゼンテーションは、あなたが他のアルゴリズムを理解するために一般的なアルゴリズムのキーワードインデックスを表示することができたために、いくつかの一般的に使用されるアルゴリズムがあります。


(1)並べ替え

例えば次のようにソートアルゴリズムは次のようになります。

//使用快速排序算法对list进行升序排序,排序后两个12的位置不确定
QList<int> list1;
list1 << 33 << 12 << 68 << 6 << 12;
std::sort(list1.begin(), list1.end());
qDebug() << list1; // 输出:(6, 12, 12, 33, 68)

//使用一种稳定排序算法对list2进行升序排序,排序前在前面的12,排序后依然在前面
QList<int> list2;
list2 << 33 << 12 << 68 << 6 << 12;
std::stable_sort(list2.begin(), list2.end());
qDebug() << list2; // 输出:(6, 12, 12, 33, 68)

//使用qSort()函数和std::greater算法中使list3反向排序
QList<int> list3;
list3 << 33 << 12 << 68 << 6 << 12;
qSort(list3.begin(), list3.end(), std::greater<int>()); //Qt5已弃用
qDebug() << list3; // 输出:(68, 33, 12, 12, 6)

デフォルトでは,,のqsort()昇順で、すなわち、<オペレータ比較要素を使用。下降に必要に応じて、qGreater <T>()は、第三のパラメータのqsort()関数として渡される必要が。


(2)検索

次のように検索アルゴリズムの例としては、次のとおりです。

//使用std::find()从list中查找"two",返回第一个对应的值的迭代器,如果没有找到则返回end()
QStringList list1;
list1 << "one" << "two" << "three";
QList<QString>::iterator i = std::find(list1.begin(), list1.end(), "two");
qDebug() << *i; //输出:"two"

//使用qFind()从list中查找"two",返回第一个对应的值的迭代器,如果没有找到则返回end()
QStringList list2;
list2 << "one" << "two" << "three";
QStringList::iterator j = qFind(list2.begin(), list2.end(), "two");
qDebug() << *j; //输出:"two"

さらにことを除いて、qFind()のように振る舞うqBinaryFind()関数は、そこにある、qBinaryFind()は、それが注文した一連の世話をするためにのみ適用され、バイナリサーチアルゴリズムである、とqFind()は標準的な線形検索です。典型的には、使用バイナリ探索法の条件がより過酷であるが、効率が高くなります。


(3)コピー

例えば次のようにコピーアルゴリズムは次のとおりです。

//将list1中所有项目复制到vect1中
QStringList list1;
list1 << "one" << "two" << "three";
QVector<QString> vect1(list1.count());
std::copy(list1.begin(), list1.end(), vect1.begin());
qDebug() << vect1; //输出:QVector("one", "two", "three")

//将list2中所有项目复制到vect2中
QStringList list2;
list2 << "one" << "two" << "three";
QVector<QString> vect2(list2.count());
qCopy(list2.begin(), list2.end(), vect2.begin());
qDebug() << vect2; //输出:QVector("one", "two", "three")


(4)交換

例えば次のように交換アルゴリズムは次のとおりです。

//交换pi和e的值
double p1 = 3.14;
double e1 = 2.71;
std::swap(p1, e1);
qDebug() << "p1:" << p1 << "e1:" << e1; // 输出:p1=2.71,e1=3.14

//交换pi和e的值
double p2 = 3.14;
double e2 = 2.71;
std::swap(p2, e2);
qDebug() << "p2:" << p2 << "e2:" << e2; // 输出:p2=2.71,e2=3.14


(5)充填

次のようなアルゴリズムを充填する例を示します。

//将vector的前5位设置成3,而最后5位设置为7
QVector<int> vect(10);
qFill(vect.begin(), vect.begin() + 5, 3);
qFill(vect.end() - 5, vect.end(), 7);
qDebug() << vect; //输出:QVector(3, 3, 3, 3, 3, 7, 7, 7, 7, 7)

//将vector的前5位设置成3,而最后5位设置为7
QVector<int> vect2(10);
std::fill(vect2.begin(), vect2.begin() + 5, 3);
std::fill(vect2.end() - 5, vect2.end(), 7);
qDebug() << vect2; //输出:QVector(3, 3, 3, 3, 3, 7, 7, 7, 7, 7)


(6)その他

(一部が表示されていない)は、以下のような他の一般的な算術関数です。

  • qCount()は、値がコンテナ内に発生する回数を算出します。
  • qDeleteAll()がコンテナ要素のデストラクタ、C ++、オペレータが削除呼び出します。
  • qEqual()は、2つの配列が同じ要素で比較します。



参考:

一般的なアルゴリズムQTコンテナ


おすすめ

転載: www.cnblogs.com/linuxAndMcu/p/11027942.html