Как вернуть 2D массив из функции в cpp - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь создать 2d массив и хочу вернуть его через функцию ... Любые предложения ... Я просмотрел все сайты и ничего не нашел ..

double ** function() {

    double array[] [] ;
                /*code.............. */
    return array:
    ;
    }

1 Ответ

0 голосов
/ 20 апреля 2019

Лучше использовать vector как woz, предложенный в комментарии. Но с массивом вы можете сделать это. Но сначала вы должны быть уверены, кто создает массив, и это должен быть тот же файл / класс, который его удаляет. Безопасным способом было бы не открывать исходный массив и получать к нему доступ с помощью функции (помните, что этот код не является потокобезопасным).

class Array2D
{    
public:

    Array2D(int xSize, int ySize)
    {
        xS = xSize;
        yS = ySize;
        arr = new double*[xSize];
        for(int i = 0; i < xSize; ++i)
            arr[i] = new double[ySize];
    }

    bool GetData(int x, int y, double& value)
    {
        if(x < xS && y < yS)
        {
            value = arr[x][y];
            return true;
        }
        return false;
    }

    bool SetData(int x, int y, double value)
    {
        if(x < xS && y < yS)
        {
            arr[x][y] = value;
            return true;
        }
        return false;
    }

    ~Array2D()
    {
        for (int i = 0; i < xS; i++)
        {
            delete [] arr[i];
        }
        delete [] arr;
    }

private:
    //A default constructor here will prevent user to create a no initialized array
    Array2D(){};
    double** arr;
    int xS;
    int yS;
};
...