1

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

例如..

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.
4

2 回答 2

2

使用参考

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

于 2013-08-17T07:15:55.477 回答
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);

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

于 2013-08-17T07:41:56.217 回答