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的开始及其后面的等数量的项目进行比较,
// 全部相同则返回true
qDebug() << 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,eleven
QList<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,8
QList<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.14
return a.exec();
}
运行结果: