C ++: двумерный массив: одно измерение исправлено? - PullRequest
3 голосов
/ 10 августа 2010

Мне нужно передать double [][6] методу. Но я не знаю, как создать этот двумерный массив.

6 - это фиксированный размер (или «буквальная константа», если моя терминология верна), который принимает метод. Я пытался что-то вроде этого, но безуспешно ...

double *data[6] = new double[6][myVariableSize];

Итак, метод действительно выглядит так:

int myMethod(double obj_data[][6]);

Заранее спасибо

Ответы [ 5 ]

3 голосов
/ 10 августа 2010

Это должно работать:

int myMethod(double obj_data[][6])
...
int myVariableSize = 10;
double (*data)[6] = new double[myVariableSize][6];
myMethod(data);

Как уже упоминалось, только первое измерение может быть переменным!

3 голосов
/ 10 августа 2010

В C ++ вы можете использовать std::array<std::vector<double>, 6>.

typedef std::array<std::vector<double>, 6> my_array_t;

int myMethod( const my_array_t& obj_data );

Если ваш компилятор все еще не поддерживает std::array, вы можете использовать boost::array вместо.

3 голосов
/ 10 августа 2010

Я не могу понять из вопроса, какое измерение есть, но это стоит попробовать:

double (*data)[6] = new double[myVariableSize][6];
1 голос
/ 10 августа 2010

Ваше определение метода должно выглядеть следующим образом (в соответствии с вашим определением):

int myMethod(double obj_data[6][]);

.. но это недопустимо в C ++, потому что только первое измерение может быть неопределенным.Попробуйте следующее:

int myMethod(double **obj_data, const int numOfColumns, int numOfRows)
{
    // Set the element in the last column / row to 5
    obj_data[numOfRows-1][numOfColumns-1] = 5;

    return 0;
}


int main(int argc, char* argv[])
{
    // Define array size
    int myNumOfRows = 5;
    const int numOfColumns = 6;

    // Allocate memory
    double** data = new double*[myNumOfRows];
    for (int i = 0; i < myNumOfRows; ++i)
    {
        data[i] = new double[numOfColumns];
    }

    // Do something with the array
    myMethod(data, numOfColumns, myNumOfRows);

    return 0;
}
0 голосов
/ 10 августа 2010

Мой коллега и я не могли получить никаких вариантов задачи, которую вы предложили для работы.Но это работает и компилируется:

int myMethod(double** obj_data)
{
    return 5;
}

int _tmain(int argc, _TCHAR* argv[])
{
    const int myVariableSize = 3;
    double** b = new double*[3];
    for (int i = 0 ; i < 3;i++)
    {
        b[i] = new double[myVariableSize];
    }

    myMethod(data);

    return 0;
}

Я предлагаю вам просто вернуться к использованию двойного вектора для 2D-массива или использовать некоторые из многомерных массивов Boost (как мне сказали).

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