QT学习笔记(十):通用算法示例
std是C++标准库统一使用的命名空间(namespace)的名称,C++标准库中的名字全部都在std这个命名空间中,std也就是英文"standard"(标准)的缩写。
#include <QCoreApplication>
#include <QVector>
#include <QStringList>
#include <QDebug>#include <functional> //因为用了std::greater<int>()
#include <algorithm> // STL 标准模板算法库 int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QStringList list;list << "one" << "two" << "three";// 1、将list中所有项目复制到vect中qDebug() << QObject::tr("std::copy算法:");QVector<QString> vect(3);std::copy(list.begin(), list.end(), vect.begin());qDebug() << vect;//结果为one,two,three///2、从list的开始到结束的所有项目与vect的开始及其后面的等数量的项目进行比较,// 全部相同则返回trueqDebug() << endl << QObject::tr("std::equal算法:");bool ret1 = std::equal(list.begin(), list.end(), vect.begin());qDebug() << "euqal: " << ret1; //结果为true// 3、从list中查找"two",返回第一个对应的值的迭代器,如果没有找到则返回end()qDebug() << endl << QObject::tr("std::find算法:");QList<QString>::iterator i = std::find(list.begin(), list.end(), "two");qDebug() << *i; // 结果为"two"///4、将list中的所有项目填充为"eleven"qDebug() << endl << QObject::tr("std::fill算法:");std::fill(list.begin(), list.end(), "eleven");qDebug() << list; // 结果eleven,eleven,elevenQList<int> list1;list1 << 3 << 3 << 6 << 6 << 6 << 8;// 5、查找6的个数qDebug() << endl << QObject::tr("std::count算法:");int countOf6 = std::count(list1.begin(), list1.end(), 6);qDebug() << "countOf6: " << countOf6; // 结果为3// 6、返回第一个出现5的位置,如果没有5,则返回5应该在的位置,// list1被查找的范围中的项目必须是升序qDebug() << endl << QObject::tr("std::lower_bound算法:");QList<int>::iterator j = std::lower_bound(list1.begin(), list1.end(), 5);list1.insert(j, 5);qDebug() << list1; // 结果3,3,5,6,6,6,8QList<int> list2;list2 << 33 << 12 << 68 << 6 << 12;//7、使用快速排序算法对list2进行升序排序,排序后两个12的位置不确定qDebug() << endl << QObject::tr("std::sort算法:");std::sort(list2.begin(), list2.end());qDebug() << list2; // 结果6,12,12,33,68// 8、使用一种稳定排序算法对list2进行升序排序,// 排序前在前面的12,排序后依然在前面qDebug() << endl << QObject::tr("std::stable_sort算法:");std::stable_sort(list2.begin(), list2.end());qDebug() << list2; // 结果6,12,12,33,68///9、可以在qSort()算法中使其反向排序(替代std::sort)qDebug() << endl << QObject::tr("std::greater算法:");qSort(list2.begin(), list2.end(), std::greater<int>());qDebug() << list2; // 结果68,33,12,12,6// 10、交换pi和e的值qDebug() << endl << QObject::tr("std::swap算法:");double pi = 3.14;double e = 2.71;std::swap(pi, e); qDebug() << "pi:" << pi << "e:" << e; // 结果pi=2.71,e=3.14return a.exec();
}
运行结果: