【QT学习笔记】QPair用法 | 如何定义一个函数返回两个值

一个函数可以返回两个参数吗

在大多数编程语言中,一个函数通常只能返回一个值。但是,可以通过一些技巧来实现返回多个参数的效果。以下是几种常见的方法:
使用数组或元组:可以将多个值放入一个数组或元组中,然后将该数组或元组作为函数的返回值。调用函数后,可以通过索引或解构赋值来获取返回的多个参数。
使用结构体或类:可以定义一个结构体或类,其中包含需要返回的多个参数作为成员变量。然后,将该结构体或类的实例作为函数的返回值。调用函数后,可以通过访问结构体或类的成员变量来获取返回的多个参数。
使用引用参数:可以将需要返回的多个参数作为函数的引用参数传入,并在函数内部修改这些参数的值。调用函数后,可以通过传入的引用参数来获取返回的多个参数。
使用指针参数:类似于引用参数,可以将需要返回的多个参数作为函数的指针参数传入,并在函数内部修改指针指向的值。调用函数后,可以通过传入的指针参数来获取返回的多个参数。
这些方法都可以实现返回多个参数的效果,具体选择哪种方法取决于编程语言和具体需求。

QT中,如何定义一个函数返回两个short类型的数值

在Qt中,你可以使用QPair来定义一个函数返回两个short类型的数值。QPair是Qt提供的一个模板类,用于存储两个值的有序对。

下面是一个示例代码,展示了如何定义一个函数返回两个short类型的数值:

#include <QPair>

QPair<short, short> getTwoShortValues()
{
short value1 = 10;
short value2 = 20;
return qMakePair(value1, value2);
}

在上面的代码中,getTwoShortValues()函数返回了一个QPair<short, short>类型的值,其中包含了两个short类型的数值。你可以根据实际需求修改value1和value2的值。

使用示例:

QPair<short, short> result = getTwoShortValues();
short value1 = result.first;
short value2 = result.second;

你可以通过result.first和result.second来获取返回的两个short类型的数值。

QPair用法

QPair 就和 C++ 里的 Pair 用法差不多.

template <class T1, class T2> struct pair 
参数:class T1是第一个值的数据类型,class T2是第二个值的数据类型。 
功能:pair将一对值(可以是不同的数据类型)组合成一个值,两个值可以分别用pair的两个公有函数first和second访问。 
具体用法: 

1.原型

QPair()
QPair(QPair<TT1, TT2> &&p)
QPair(const QPair<TT1, TT2> &p)
QPair(const T1 &value1, const T2 &value2)

2.可访问的成员变量

T1 first
T2 second

3.常用接口

  • 创建一对QPair项值
QPair<T1, T2> qMakePair(const T1 &value1, const T2 &value2)
  • 交换两个QPair项值
void swap(QPair<T1, T2> &other)
void swap(QPair<T1, T2> &lhs, QPair<T1, T2> &rhs)

等同于:

qSwap(this->first, other.first);
qSwap(this->second, other.second);
  • 赋值(=)操作
QPair<T1, T2> &operator=(const QPair<TT1, TT2> &p)
QPair<T1, T2> &operator=(QPair<TT1, TT2> &&p)
  • 比较操作
    注意:先比较T1,如果相同则再比较T2。
bool operator!=(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
bool operator<(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
bool operator<=(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
bool operator==(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
bool operator>(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
bool operator>=(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
  • 对流的支持
    注意:需要对T1和T2实现重载>><<
QDataStream &operator>>(QDataStream &in, QPair<T1, T2> &pair)
QDataStream &operator<<(QDataStream &out, const QPair<T1, T2> &pair)

4.示例

/* 初始化QPair */
QPair<QString, double> pair("PI", 3.14);
/* 创建QPair列表 */
QList<QPair<QString, double> > pairList;
pairList.append(pair);
pairList.append(qMakePair(QString("E"), 2.71));

/* 遍历输出 */
for (QPair<QString, double> pair : pairList) {
    qDebug() << "Key: " << pair.first; // 获取第一个值
    qDebug() << "Value: " << pair.second; // 获取第二个值
}

输出:

Key:  "PI"
Value:  3.14
Key:  "E"
Value:  2.71

5.其他相关

  • 当QMap容器大小为1时,QMap与QPair功能基本相同;
  • QPair对应标准库模板类为std::pair
  • 类似的还有std::tuple(元组)数目不限制,而QPair和std::pair都限制为2。

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IIIIIII_II

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值