我们在使用C++编程的过程中,常常会遇到一个函数返回多个值的问题。下面就梳理了一下,C++中处理多返回值的中常用方法。
如果需要返回多个返回值,还是推荐使用结构体。
全局变量和下面的指针(引用) 都是比较适合变量不多的情况下。这里就不举例子啦。
#include
#include
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;
}
std::array<std::string,2> func_name(){
....
array<string,2> result;
result[0]=值1;
result[1]=值2;
return result;
}
std::vector<std::string> func_name(){
....
vector<string> result;
result[0]=值1;
result[1]=值2;
return result;
}
array是在栈内存上创建的,效率比vector要快。vector的底层实现是在堆内存上,所以效率比较慢的。
vector 和 array 都是返回的相同类型的多个值,如果我们需要返回多个不同类型的变量时,可以考虑下面的 tuple 和 pair
一般格式:
std::tuple<std::string,int,double> func_name{
...
return std::make_tuple(返回值1,返回值2,返回值3);
}
例子:
#include
#include //make_tuple
#include
#include
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变量名)
一般格式:
std::tuple<std::string,int> func_name{
...........
return std::make_pair(返回值1,返回值2);
}
例子:
#include
#include
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 方式
一般格式:
struct 结构体名{
变量1;
变量2;
...
}
struct 函数名(){
..............
return {变量1,变量2,...};
}
例子:
#include
#include
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;
}
综合各方面,用 结构体 返回多个值是比较好的。