тип возвращаемого массива целых чисел

0

Я хочу знать, могу ли я заставить функцию возвращать массив целых чисел. Я пробовал код, который выглядит так:

int function[](){
    code;
}

и я попробовал код, который выглядит так:

int[] function(){
    code;
}

Ни одна из них не работает. Какие-либо предложения?

  • 0
    обычно не практично возвращать массив.
  • 0
Показать ещё 3 комментария
Теги:
return-type

5 ответов

2
Лучший ответ

Вы можете попробовать std::array<int, N> если размер массива уже известен. В других ситуациях вместо этого используйте std::vector<int>.

1

Решение:

#include <iostream>
#include <vector>

void print_vec(int arr[])
{
    std::vector<int> vec;
    vec.insert(vec.begin(), arr, arr+3);
    for (auto x: vec) {
         std::cout << ' ' << x;
    }
    std::cout << '\n';
}

int main ()
{
    int arr[] = { 501,502,503 };
    print_vec(arr);
}

Output:

501 502 503

Ссылка на компилятор → Компилятор Ссылка

  • 0
    Почему отрицательный голос? Я сделал все, что попросил ОП.
0
#include <stdio.h>

int *func1(int year){
    static int array[][13] = {
        {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
        {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
    };
    return array[year % 4 == 0 && year % 100 != 0 || year % 400 == 0];
}
int (*func2(int year))[13]{
    static int array[][13] = {
        {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
        {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
    };
    return &array[year % 4 == 0 && year % 100 != 0 || year % 400 == 0];
}

int main(void){
    int *p1 = func1(2000);
    int (*p2)[13] = func2(2000);

    printf("%d\n", p1[2]);
    printf("%d\n", (*p2)[2]);

    return 0;
}
0

Попробуй это :-

int* function ()
{}

Но не забывайте, что функция вызова теперь несет ответственность за этот массив, т.е. За удаление этого массива.

0

Вы можете вернуть указатель на массив, если этот массив создан с new оператором в куче. Как это:

int* get_an_array(int array_size)
{
   int arr = new int[array_size];

   return arr;
}

Помните, что вы позже ответите за удаление этого массива.

Примечание 1:
Вы не можете вернуть указатель на локально созданный массив (помещенный в стек). Например:

int* get_an_array(int array_size)
{
   int arr[array_size];

   return arr;
}

этот массив уничтожается, как только вы выходите из функции.

Заметка 2:
Рассмотрите возможность использования векторов STL вместо массивов. С векторами STL: 1) Перед вызовом функции вам не нужно знать количество элементов. 2) Вам не нужно динамически создавать массив. (Также возврат вектора по значению обычно выполняется быстро, так как компилятор использует копию elision (RVO)).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню