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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 学习使用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月前
Qt类结构分析
Qt类结构分析
57 3
|
17天前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
30 4
|
3月前
|
搜索推荐 算法 Java
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。
31 1
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
|
2月前
|
设计模式 前端开发 安全
Qt注册类对象单例与单类型区别
在进行开发时,应当根据具体的应用场景和需求来选择使用单例模式或是单类型。如果是全局服务或状态管理,可能需要单例模式;如果是为了使QML环境下的不同组件能够访问到同一个后端服务对象,则可能需要使用单类型。
32 2
|
3月前
|
安全 算法 Java
【Java集合类面试二】、 Java中的容器,线程安全和线程不安全的分别有哪些?
这篇文章讨论了Java集合类的线程安全性,列举了线程不安全的集合类(如HashSet、ArrayList、HashMap)和线程安全的集合类(如Vector、Hashtable),同时介绍了Java 5之后提供的java.util.concurrent包中的高效并发集合类,如ConcurrentHashMap和CopyOnWriteArrayList。
【Java集合类面试二】、 Java中的容器,线程安全和线程不安全的分别有哪些?
|
3月前
|
编解码 开发框架
【Qt 学习笔记】Qt窗口 | Qt窗口介绍 | QMainwindow类及各组件介绍
【Qt 学习笔记】Qt窗口 | Qt窗口介绍 | QMainwindow类及各组件介绍
206 3
|
3月前
|
容器
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Group Box的使用及说明
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Group Box的使用及说明
209 3
|
3月前
|
容器
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Tab Widget的使用及说明
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Tab Widget的使用及说明
60 2
|
3月前
【Qt 学习笔记】Qt常用控件 | 输入类控件 | Slider的使用及说明
【Qt 学习笔记】Qt常用控件 | 输入类控件 | Slider的使用及说明
324 2