Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
前言:
Qt提供了一些全局的模板函数,这些函数在<QtAlgorithms>头文件中,是一些可以使用在容器上的十分常用的算法函数。包括复制、比较、查找、排序等。我们可以在任何提供了STL风格迭代器的容器类上使用这些算法,包括QList、QLinkedList、QVector、QMap和QHash。
如果目标平台上可以使用STL,那么可以使用STL的算法来代替Qt的这些算法,因为STL提供了更多的算法,而Qt只是提供了其中最重要的一些算法。查看算法都有哪些可以进入到头文件中去查看。
常用算法:
QString List list;
list<<"one"<<"two"<<"three";
QVector\<QStringn> vect(3);
复制代码
- std::copy() //对容器项目进行复制
将list中所有项目复制到vect中。
std::copy(list.begin(), list.end(), vect.begin());
复制代码
- std::equal() //对容器项目进行比较
从list的开始到结束的所有项目与vect的开始及其后面的等数量的项目进行比较,全部相同则返回true。
bool ret = std::equal(list.begin(), list.end(), vect.begin());
复制代码
- std::find() //对容器项目进行查找
从list中查找“two”,返回第一个对应的值的迭代器,如果没有找到则返回end()。
QList<QStirng>::iterator iter = std::find(list.begin(), list.end(), "two");
复制代码
- std::fill() //对容器项目进行填充
将list中的所有项目填充为“eleven”。
std::fill(list.begin(), list.end(), "eleven");
复制代码
- std::count() //对容器项目进行查找个数
查找6的个数。
QList<int> list1;
list1<<3<<3<<6<<6<<6<<8;
int count = std::count(list1.begin(), list1.end(), 6);
复制代码
- std::lower_bound() //对升序容器项目进行查找
返回第一个出现5的位置,如果没有5,则返回5应该在的位置,list被查找的范围中的项目必须是升序
QList<int> list1;
list1<<3<<3<<6<<6<<6<<8;
QList<int>::iterator iter = std::lower_bound(list1.begin(), list1.end(), 5);
list1.insert(iter, 5);
//结果3,3,5,6,6,6,8
复制代码
- std::sort() //使用快速排序对容器项目进行升序排序
使用快速排序算法对list2进行升序排序,排序后两个12的位置不确定。
QList<int> list2;
list2<<33<<12<<68<<6<<12;
std::sort(list2.begin(), list2.end());
//结果6,12,12,33,68
复制代码
- std::stable_sort() //使用一种稳定排序算法对容器项目进行升序排序
使用一种稳定排序算法对list2进行升序排序,排序前在前面的12,排序后依然在前面。
QList<int> list2;
list2<<33<<12<<68<<6<<12;
std::stable_sort(list2.begin(), list2.end());
//结果6,12,12,33,68
复制代码
- qsort() //反向排序
QList<int> list2;
list2<<33<<12<<68<<6<<12;
qSort(list2.begin(), list2.end(), std::greater<int>());
//结果68,33,12,12,6
复制代码
- std::swap() //交换两个变量的值
int a = 3;
int b = 4;
std::swap(a, b);
//此时a=4,b=3
复制代码
其他算法:
<QtGlobal>头文件中也提供了一些函数来实现一些经常使用的功能:
- qAbs() //获取绝对值
- qBound() //获取数值边界
- qMax() //获取两个数中的最大值
- qMin() //获取两个数中的最小值
- qRound() //返回一个浮点数接近的整数值
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END