C++ 返回多值

概述

我们在使用C++编程的过程中,常常会遇到一个函数返回多个值的问题。下面就梳理了一下,C++中处理多返回值的中常用方法。

如果需要返回多个返回值,还是推荐使用结构体。

C++几种返回多值的方法

1 全局变量

全局变量和下面的指针(引用) 都是比较适合变量不多的情况下。这里就不举例子啦。

2 指针(引用)

#include<iostream>
#include<string>
void func1(std::string& s, int& n) {//传引用
	std::string a = "xian";
	int b = 2023;
	s = a;
	n = b;
}

int main() {
	std::string s;
	int n;
	func1(s,n);
	std::cout << s << n << std::endl;
}

3 数组

3.1 array

std::array<std::string,2>  func_name(){
	....
	array<string,2>  result;
	result[0]=1;
	result[1]=2;
	return result;
}

3.2 vector

std::vector<std::string>  func_name(){
	....
	vector<string>  result;
	result[0]=1;
	result[1]=2;
	return result;
}

array是在栈内存上创建的,效率比vector要快。vector的底层实现是在堆内存上,所以效率比较慢的。
vectorarray 都是返回的相同类型的多个值,如果我们需要返回多个不同类型的变量时,可以考虑下面的 tuplepair

3.3 元组tuple

一般格式:

 std::tuple<std::string,int,double> func_name{
  	...
  	return std::make_tuple(返回值1,返回值2,返回值3);
  }

例子:

#include<iostream>
#include<utility>//make_tuple
#include<tuple>
#include<string>
std::tuple<std::string, int, double> func2() {
	std::string a= "changandaxue";
	int b = 71;
	double c = 43.1;
	return make_tuple(a, b, c);
}
int main() {
	engine::show_message();
	std::tuple<std::string, int, double> t1 = func2();
	std::string a=std::get<0>(t1);//从tuple里面获取数据  获取数据的方式比较麻烦
	int b = std::get<1>(t1);
	int c = std::get<2>(t1);
	std::cout << a << b << c << std::endl;
	std::cin.get();
}

在元组中获取值需要用到 get<索引>(tuple变量名)

3.4 pair

一般格式:

std::tuple<std::string,int> func_name{
  	...........
  	return std::make_pair(返回值1,返回值2);
  }

例子:

#include<iostream>
#include<string>
std::pair<std::string,int> func3() {
	std::string a = "xian";
	int b = 2023;
	return make_pair(a,b);
}
int main() {
	std::pair<std::string, int> a1 = func3();
	std::cout << a1.first << " " << a1.second << std::endl;
}

pair只支持返回两个变量。获取元素的方式也可以通过是 std::get 方式

4 结构体

一般格式:

struct  结构体名{
	变量1;
	变量2...
}
struct 函数名(){
	..............
	return {变量1,变量2...};
}

例子:

#include<iostream>
#include<string>
struct MyStruct
{
	std::string a;
	int b;
	double c;
};
MyStruct func4() {
	std::string a = "xian";
	int b = 2023;
	double c = 12.1;
	return { a,b,c };//返回一个结构体
}
int main() {
	MyStruct m_struct = func4();
	std::cout << m_struct.a << " " << m_struct.b << " " << m_struct.c << std::endl;
}

综合各方面,用 结构体 返回多个值是比较好的。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值