C++函数一般可以返回一个值,但是在使用中常常需要一个函数返回多个值,因此可以使用结构体
或tuple
来进行实现。
注意看代码里的注释!!!
1.使用结构体返回多个值
实现步骤:
1.先定义一个结构体
2.准备我们要实现的函数(需要返回多个值)
3.在要实现的函数内调用结构体返回多个值
4.使用函数返回结果
代码示例:
step 1 :定义结构体
struct PointStruct
{
float without_floor;
int only_floor;
};
首先定义一个结构体,我们命名为PointStruct
,你可以随意起想要的名称。假设我们的函数要返回的参数有两个,一个是float
类型的,一个是int
类型的,那么就在PointStruct
这个函数里面进行定义一下。如果想要返回更多的数据,直接写在PointStruct
函数里即可。
step 2 :定义函数
//定义了一个返回值为PointStruct的函数,函数名为filterFloorPoint
PointStruct filterFloorPoint( int max_iterations,float in_floor_max_angle,float Distance_Threshold)
{
int result_iterations;
float result_angle_add_distance;
result_iterations=max_iterations*100;
result_angle_add_distance=in_floor_max_angle*Distance_Threshold;
//此时,我们想要函数返回result_iterations和result_angle_add_distance两个值
//step 3:调用结构体返回多个值
//调用PointStruct结构体返回多个值
PointStruct use_PointStruct; //use_PointStruct 可以换成你自己想要的名称
use_PointStruct.without_floor=result_iterations;
use_PointStruct.only_floor=result_angle_add_distance;
return use_PointStruct; //只需要返回 use_PointStruct即可
}
这里我们定义了一个函数filterFloorPoint
,想要这个函数返回两个值,一个值为 int
类型的result_iterations
,一个值为float
类型的result_angle_add_distance
。
只需要在函数的最后,对第一步定义好的PointStruct
结构体进行调用。如上面代码所示。
int main()
{
//step 4:调用结构体返回的多个值
int max_iterations=10;
float in_floor_max_angle=10.0;
float Distance_Threshold=10.0;
int without_floor_cloud_ptr;
float only_floor_cloud_ptr;
PointStruct use_PointStruct_now; //调用PointStruct结构体
use_PointStruct_now=filterFloorPoint(max_iterations,in_floor_max_angle,Distance_Threshold); //调用函数
without_floor_cloud_ptr=use_PointStruct_now.without_floor; //取第一个函数返回值
only_floor_cloud_ptr=use_PointStruct_now.only_floor;//取第二个函数返回值
return 0;
}
2.使用tuple返回多个值
相比于结构体,要实现函数返回多个值的方法,使用tuple更为简洁、灵活。实现步骤:
定义函数f(x):类型为tuple
函数返回多个值:使用make_tuple(result1,result2,...)
使用函数结果:result=f(x)
取函数返回值:result1=get<0>(result);
result2=get<1>(result);
代码示例:
tuple<int, float> filterFloorPoint( int max_iterations,float in_floor_max_angle,float Distance_Threshold)
{
int result_iterations;
float result_angle_add_distance;
result_iterations=max_iterations*100;
result_angle_add_distance=in_floor_max_angle*Distance_Threshold;
//此时,我们想要函数返回result_iterations和result_angle_add_distance两个值
//使用make_tuple将要返回的数据写在()里面即可,注意数据类型的顺序
return make_tuple(result_iterations,result_angle_add_distance);
}
这里我们定义了一个返回值类型为tuple
的函数filterFloorPoint
,其实现内容和普通函数无异,只是在函数的返回值处使用了make_tuple()
方法将要返回的数据写在里面。那么我们如何对结果进行取值使用呢?
int main()
{
int max_iterations=10;
float in_floor_max_angle=10.0;
float Distance_Threshold=10.0;
tuple<int, float> get_filterFloorPoint_result;
//调用 filterFloorPoint 方法
get_filterFloorPoint_result=filterFloorPoint(max_iterations,in_floor_max_angle,Distance_Threshold);
without_floor_cloud_ptr=get<0>(get_filterFloorPoint_result); //取第一个值
only_floor_cloud_ptr=get<1>(get_filterFloorPoint_result); //取第二个值
return 0;
}
这里我们使用了get<i>
方法对函数返回结果进行取值,i
为我们的返回值序号。
综上所述,个人觉得使用tuple
方法更为便捷,因为不需要定义结构体,且在函数内只需要对返回值类型进行修改、对返回值使用make_tuple()
方法进行包装,在调用的时候根据索引来调用更好理解。但需要注意返回参数的顺序不要混淆。
---------------------
作者:@you_123
来源:CSDN
原文:https://blog.csdn.net/qq_43685921/article/details/123854007
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件