在头文件中,Qt提供了一些全局的模板函数,这些函数是可以使用在容器上的十分常用的算法。我们可以在任何提供了STL风格迭代器的容器类上使用这些算法,包括QList、QLinkedList、QVector、QMap和QHash。
qsort
- 正序(从小到大)
QList<int> list;
list << 36 << 16 << 66 << 6 << 56;
qSort(list.begin(), list.end());
// list: [ 6, 16, 36, 56, 66 ]
- 逆序(greater:从大到小)
QList<int> list;
list << 36 << 16 << 66 << 6 << 56;
qSort(list.begin(), list.end(), qGreater<int>());
// list: [ 66, 56, 36, 16, 6 ]
qcopy
QStringList list;
list << "a" << "b" << "c";
QVector<QString> vect(3);
qCopy(list.begin(), list.end(), vect.begin());
foreach (QString item, vect)
{
qDebug() << item;
}
QStringList list;
list << "one" << "two" << "three";
QVector<QString> vect1(3);
qCopy(list.begin(), list.end(), vect1.begin());
// vect: [ "one", "two", "three" ]
QVector<QString> vect2(8);
qCopy(list.begin(), list.end(), vect2.begin() + 2);
// vect: [ "", "", "one", "two", "three", "", "", "" ]
qfill
QVector<QString> vect(5);
qFill(vect.begin() + 1, vect.end() - 2, "PUBG");
foreach (QString item, vect)
{
qDebug() << item;
}
qfind
- QList 使用qfind
QList<int> List;
List << 1 << 5 << 15 << 25;
QList<int>::const_iterator Iter = qFind(List.begin(), List.end(), 25);
if(Iter != List.end())
{
qDebug() << "Find: " << *Iter;
}
else
{
qDebug() << "Not Find";
}
- QMap使用qfind
QMap<QString, QString> Employees;
Employees.insert("c++", "Bob");
Employees.insert("win32", "xiaqi");
Employees.insert("mfc", "laowang");
Employees.insert("qt", "mengfan");
Employees["linux"] = "Danny";
/* Danny 变laowang */
QMap<QString, QString>::iterator i = Employees.find("linux");
while (i != Employees.end() && i.key() == "linux")
{
qDebug() << i.key() << i.value() ;
i.value() = "oldwang";
++i;
}
/* 再遍历一次 */
i = Employees.begin();
while (i != Employees.end())
{
qDebug() << i.key() << i.value() ;
++i;
}