C++函数返回多个值:结构体、tuple

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()方法进行包装,在调用的时候根据索引来调用更好理解。但需要注意返回参数的顺序不要混淆。

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值