数组变为变量

时间:2010-10-25 20:32:03

标签: c++ arrays variables

说我从函数{1,2}获得f(a,b)(无论f是什么/不重要),我想将其存储到int s[2]中。我该怎么办?似乎我不能只做int s[2] = f(a,b),我无法将f的输出分开,因为没有变量可以从中获取值。 f(a,b)[0]不起作用。

4 个答案:

答案 0 :(得分: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.

答案 1 :(得分:2)

改为使用std::array数组包装器:

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

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

答案 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();

答案 3 :(得分:1)

你可以复制它,如 memcpy(dest,f(1,2),size)

或者您可以返回 结构 。将数组包装在 struct 中以便通过 operator =()轻松复制它是一个老技巧。 E.g:

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

struct 包装随后会变得有用,当您的代码发展并且您决定返回第三个值时。作为 struct 意味着您可以使其成为向后兼容的更改,并避免更改其他代码......