2010-10-25 108 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