写点什么

Qt | Qt 中的一些使用在容器类上的算法

作者:YOLO.
  • 2022 年 9 月 07 日
    河北
  • 本文字数:1212 字

    阅读完需:约 4 分钟

Qt | Qt中的一些使用在容器类上的算法

前言:

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() //返回一个浮点数接近的整数值

发布于: 刚刚阅读数: 3
用户头像

YOLO.

关注

还未添加个人签名 2022.05.06 加入

还未添加个人简介

评论

发布
暂无评论
Qt | Qt中的一些使用在容器类上的算法_qt_YOLO._InfoQ写作社区