массив в переменную - PullRequest
       1

массив в переменную

1 голос
/ 26 октября 2010

Скажите, я получаю {1,2} из функции f(a,b) (не имеет значения, что f является / делает), и я хочу сохранить его в int s[2]. Как бы я это сделал? Кажется, что я не могу просто сделать int s[2] = f(a,b) и не могу отделить вывод f, так как нет переменной для получения значений. f(a,b)[0] не работает.

Ответы [ 4 ]

3 голосов
/ 26 октября 2010

Все зависит от того, что именно 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 голосов
/ 26 октября 2010

Для возврата двух функций из функции я предпочитаю 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();
2 голосов
/ 26 октября 2010

Вместо этого используйте оболочку массива std::array:

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

std::array<int, 2> result = f(1, 2);
1 голос
/ 26 октября 2010

Вы можете скопировать его, как в memcpy (dest, f (1,2), size) .

Или вы можете просто вернуть структура .Это старый трюк - обернуть массив в struct , чтобы легко скопировать его с помощью operator = () .Например:

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

Обтекание struct станет полезным позже, когда ваш код эволюционирует и вы решите вернуть третье значение.Быть struct означает, что вы можете сделать это обратно совместимым изменением и избежать изменения столь же большого количества другого кода ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...