函数可以返回多于1个变量/结构/向量吗?

时间:2013-08-17 07:02:08

标签: c++

我正在编写一个函数,其中我传递3个不同(struct)数据类型的向量1个向量将包含一些值,并且在执行所有操作之后,我正在填充具有不同数据集的其他两个向量。所以我的问题是函数是否可能返回多于1个变量/ struct / vectors。

例如..

func_name(vect1,&vect2,&vect3) //function definition
{
// steps of performing some operations 
// enter code here vect1 contains data, vect2 & vect3 are empty
// after performing operation vect2 & vect3 filled with different set of data

is it possible to return vect2 & vect3 simultaneously.
}

func_name(vect1,vect2,vect3) // function calling.

2 个答案:

答案 0 :(得分:2)

使用references

template<typename T>
void func_name(std::vector<T>& vect1,  
               std::vector<T>& vect2,
               std::vector<T>& vect3)  //..Notice & sign
{
/* Your Processing */
}

func_name(vect1,vect2,vect3);
//Now all vect1, vect2 and vect3 will be updated as per func_name processing

如果您不必更新const std::vector<T>& vect1

,可以使用vect1作为第一个参数

答案 1 :(得分:1)

有趣的是,这是大多数高级语言的缺陷,在汇编程序级别上没有这样的限制。我认为它的主要原因是我们在表达式中使用函数的返回值的方式。

在我看来,有两种可用的解决方案:返回结构/元组,或传递指针返回参数。

typedef struct {
    int a, b, c;
} MyReturnType;

MyReturnType structFunc(...) {
    return (MyReturnType){
        .a = ...,
        .b = ...,
        .c = ...
    };
}

//somewhere else
    structFunc(...).c

或者,使用指针:

void pointerFunc(int* outA, int* outB, int* outC) {
    *outA = ...;
    *outB = ...;
    *outC = ...;
}

//somewhere else
    int a, b, c;
    pointerFunc(&a, &b, &c);

我通常更喜欢指针方法,因为函数声明独立存在。但是,结构方法具有它的价值,并且如果实际只使用一个返回值,它可以减少调用方面的混乱。