栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 函数返回多个值的方法总结

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 函数返回多个值的方法总结

文章目录
    • 思路
      • 一、返回可以存储多个值的数据结构
      • 二、使用引用形参返回额外信息

思路 一、返回可以存储多个值的数据结构

C++的函数返回值没有python那样容易,不能直接返回多个值,原则上C++函数最多只能返回一个数据。那么我们就应该考虑:

要想返回多个值,可以使得返回值是一个可以存储多个值的数据结构。

那么什么数据结构可以存储多个值呢?那就太多了,主要可以分为两类:

(1)基本数据结构:数组、容器(如vector)、关联容器(map、set)、pair、tuple 等
(2)自定义数据结构:类、结构体等

所以以上数据结构都可以作为函数返回值,从而实现函数返回多个值的目的。但是我们要考虑这些数据结构是否都适用于做返回值:

(1)数组和容器可以用于返回多个数据类型相同的值,具体实现可以参考 C++ 函数返回二维数组和二维vector容器 vector<vector<int>> 在STL容器中,vector的优良性质最适合作为返回值使用。

(2)关联容器map(以及pair)因为key-value的牵连关系,其实返回的是一个值,并不适用于返回多个值。并且map无法返回奇数个值(如3个值)。

(3)关联容器set作为返回值与数组和容器功能冲突,显然后面二者更适合作为返回值使用。

(4)tuple可以存储多个数据类型不同的元素,非常适用于返回多个值。示例:

#include 
#include      //使用tuple要包含头文件
#include     //使用string要包含头文件,否则无法直接用cout输出string对象。

using namespace std;


tuple func()
{
	tuple result = make_tuple(2, "hello");
	return result;
}

int main()
{
	tuple para = func();
	cout << get<0>(para) << endl;     //2
	cout << get<1>(para) << endl;     //hello
	return 0;
}

但由于tuple类型定义比较复杂,比如上面的 tuple ,一旦需要添加或更改返回值,那么也需要修改tuple的类型,这样就很麻烦了。这一点没有结构体好用,结构体只需要添加或更改数据成员即可,类型不需要修改。

(5)类和结构体可以将多个返回值作为成员,因此也可以作为返回值。但返回值一定是共有的,所以只需要使用struct即可,没必要使用class,所以struct比class更适合。示例:

#include 
#include      //使用string要包含头文件
using namespace std;


struct returnValue
{
	double x;
	string s;
	//定义构造函数方便初始化,否则无法通过构造函数初始化。
	returnValue() = default;
	returnValue(double x_, string s_) :x(x_), s(s_) {}    
};

returnValue func()
{
	returnValue output(2,"hello");
	return output;
}

int main()
{
	returnValue result = func();
	cout << result.x << endl;    //2
	cout << result.s << endl;    //hello
	return 0;
}

总结来看,适合作为返回值的数据类型有:

数组、vector容器、tuple、结构体

具体使用哪个根据实际情况而定。

二、使用引用形参返回额外信息

那只能使用1.1中的数据结构才能实现返回多个值的目的吗?别忘了,使用引用传参也可以改变参数的值,那么只要将想要获得的值作为被引用传值的实参,这样就可以获得额外信息。

具体参考:C++ 使用引用形参返回额外信息

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1038803.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号