2009-11-03 3 views
0

Я пытаюсь переписать код, который я написал в MATLAB на C++.Список или вектор массива C++?

У меня длинная ячейка в matlab, содержащая 256 терминов, где каждый член является матрицей 2x2. В Matlab я написал это так.

xA = cell(1,256); 
xA{1}=[0 0;3 1]; 
xA{2}=[0 0;13 1]; 
xA{3}=[0 0;3 2]; 

и так далее ...

Что бы проще всего использовать в C++?

Могу ли я дать массив с размерами [256] [2] [2] все 4 значения за раз или мне нужно написать одну строку для каждого конкретного значения в массиве?

/Mr.Buxley

ответ

5

Вы, конечно, можете инициализировать их все сразу, хотя это звучит как много утомительного печатания:

float terms[256][4] = { 
{ 0, 0, 3, 1 }, 
{ 0, 0, 13, 1 }, 
{ 0, 0, 3, 2} 
... 
}; 

Я упростили его до массива 256 4-го элемента массивов, для простоты. Если вы хотите, чтобы действительно выразить предполагаемый вложенности, что, конечно, приятно, что вам нужно сделать:

float terms[256][2][2] = { 
    { { 0, 0 }, { 3, 1 } }, 
    { { 0, 0 }, { 13, 1 } }, 
    { { 0, 0 }, { 3, 2 }} 
    ... 
    }; 

Это будет 256 строк, каждая из которых имеет «список» двух «списков» поплавков. Каждому списку нужны скобки. Но, так как C++ поддерживает подавление брекетов в таких вещах, как это, вы могли бы также сделать:

float terms[256][2][2] = { 
    { 0, 0, 3, 1 }, 
    { 0, 0, 13, 1 }, 
    { 0, 0, 3, 2} 
    ... 
    }; 

В самом деле, можно даже удалить скобки в каждой строке, они по желанию тоже. Я считаю, что полагаться на подавление слегка теневое.

Если вы хотите использовать типы более высокого уровня, чем вложенный массив из float (например, тип Matrix<2,2> или что-то еще), инициализация может стать сложнее.

+0

спасибо, однако я не совсем понимаю последний пример. , какими будут детексы, например. для термина 13 в этом случае? было бы [2] [3] или [2] [2] [1] – 2009-11-03 12:44:00

+1

Индексы в C и C++ начинаются с 0. Это будут термины [1] [1] [0]. – unwind

+0

о да, мой плохой ... Спасибо ... – 2009-11-03 13:01:12

Смежные вопросы