2010-10-25 112 views
1

说我从函数f(a,b)得到{1,2}(它不管什么f是/),我想将它存储到int s[2]。我会怎么做?看来我不能只是做int s[2] = f(a,b),我不能分开f的输出,因为没有变量来获取值。 f(a,b)[0]不起作用。将数组转换为变量

+4

你如何从'f'获得'{1,2}'?你不能返回一个数组......' – 2010-10-25 20:33:45

+1

'f()'有什么返回类型? – 2010-10-25 20:37:53

+2

'f'的签名是什么?或者至少,f是什么类型的返回类型? – 2010-10-25 20:38:09

回答

3

这一切都取决于f究竟返回什么。你不能简单地return {1, 2};,所以它必须返回别的东西。它是一个衰减的数组指针吗?一个std::vector

如果它是一个指针,返回指针,然后分配值。

int* p = f(a, b); 
s[0] = p[0]; 
s[1] = p[1]; 

如果s是大于两个元素,那么这将是更好地使用std::copy<algorithm>

int* p = f(a, b); 
std::copy(p, p + 2, s); // where 2 is the size of the array. 
2

使用std::array阵列封装,而不是:

std::array<int, 2> f(int, int); 

std::array<int, 2> result = f(1, 2); 
2

返回两个从功能上看,我更喜欢std::pair

#include <utility> 

std::pair<int, int> f() 
{ 
    return std::make_pair(1, 2); 
} 

int main() 
{ 
    std::pair<int, int> p = f(); 
    int s[2] = {p.first, p.second}; 
} 

如果数组已经存在,你可以通过boost::tie使分配更加容易:

boost::tie(s[0], s[1]) = f(); 
1

你可以复制它,在的memcpy(DEST,F(1,2),大小)

或者您可以只返回一个结构。将数组包含在一个结构中以便通过运算符=()轻松复制它是一个古老的技巧。例如: -

struct Foo { int a, b }; 
Foo f(int, int); 
int main() 
{ 
    Foo myF = f(1,2); 
} 

结构包装变成有用以后,当你的代码的发展,以及您决定返回第三值。作为一个结构意味着你可以使其向后兼容的变化,并避免更改尽可能多的其他代码...

+0

喜欢使用'struct'的第二部分。不喜欢'memcpy'部分。 – Arun 2010-10-26 05:09:57