0
点赞
收藏
分享

微信扫一扫

51 通用算法

在<QtAlgorithms>头文件中,Qt提供了一些全局的模板函数,这些函数是可以使用在容器上的十分常用的算法。我们可以在任何提供了STL风格迭代器的容器类上使用这些算法,包括QList、QLinkedList、QVector、QMap和QHash。

如果在目标平台上可以使用STL,那么可以使用STL的算法来代替Qt的这些算法,因为STL提供了更多的算法,而Qt只提供了其中最重要的一些算法。

在历史上,Qt曾经提供的函数是许多STL算法函数的直接等价物。从Qt 5.0开始,QT鼓励我们直接使用STL中可用的实现;大多数Qt已经被弃用(尽管它们仍然可以用于保持旧的代码编译)。

大多数情况下,使用废弃的Qt算法函数的应用程序可以很容易地移植到使用等效的STL函数。你需要
添加#include <algorithm> preprocessor指令;将Qt函数替换为STL对应函数,如下表所示。

 

Qt function

STL function

qBinaryFind

​std::binary_search​​​ or ​​std::lower_bound​

qCopy

​std::copy​

qCopyBackward

​std::copy_backward​

qEqual

​std::equal​

qFill

​std::fill​

qFind

​std::find​

qCount

​std::count​

qSort

​std::sort​

qStableSort

​std::stable_sort​

qLowerBound

​std::lower_bound​

qUpperBound

​std::upper_bound​

qLess

​std::less​

qGreater

​std::greater​

 

实例:

QStringList list;
list << "one" << "two" << "three";
qDebug() << QObject::tr("qCopy()算法:");
QVector<QString> vect(3);

// 将list中所有项目复制到vect中
std:copy(list.begin(), list.end(), vect.begin());
qDebug() << vect; //结果为one,two,three

qDebug() << endl << QObject::tr("qEqual()算法:");
// 从list的开始到结束的所有项目与vect的开始及其后面的等数量的项目进行比较,
// 全部相同则返回true
bool ret1 = std:equal(list.begin(), list.end(), vect.begin());
qDebug() << "euqal: " << ret1; //结果为true

qDebug() << endl << QObject::tr("qFind()算法:");
// 从list中查找"two",返回第一个对应的值的迭代器,如果没有找到则返回end()
QList<QString>::iterator i = std:find(list.begin(), list.end(), "two");
qDebug() << *i; // 结果为"two"

 

 

STD常用算法:

 

 

 

 

 

 

举报

相关推荐

0 条评论