2013-03-04 3 views
1

У меня есть класс с переменной массива массива.Правильно ли это инициализировать матрицу в C++

private double * array[4][4]; 

Могу ли я инициализировать его таким образом?

void RealMatrix::init(int i, int j) { 
    this->array[i][j] = new double; 
    *(this->array[i][j]) = 0; 
} 
+1

Try и посмотреть ..? – asheeshr

+1

С таким маленьким массивом я бы не сделал его в куче. просто выполните 'double array [4] [4];' и избегайте управления памятью. – andre

ответ

1

Это динамически выделяет один double и устанавливает указатель, который является элементом [i][j] 2D-массива, чтобы указать на это double. Затем он присваивает значение 0 этому double. Вы можете сделать это в одной строке с:

this->array[i][j] = new double(); // value-initialization 

Или вы можете более четко установить его в 0 с:

this->array[i][j] = new double(0); // direct-initialization 

Однако, если у вас есть очень веские причины, вы, вероятно, лучше просто иметь свой член массива содержат double сек, а не double* S:

double array[4][4]; 

Там нет смысла динамического выделения что-то, если только у ou должен. Я не могу себе представить, что у вас есть веская причина для столь маленького массива.

1

Да, вы можете. Однако, если бы я был в ваших силах, я бы избавился от указателя double (если нет особых причин, по которым вы так поступаете).

+0

Он инициализирует всю матрицу или только один элемент массива [i] [j]? – ericyoung

+0

@ericyoung: метод инициализирует только один элемент. – NPE

0

Я бы использовал vector<double>.

class Matrix { 
    std::vector<double> values; 
    const unsigned int width; 
public: 
    Matrix(unsigned int width, unsigned int height) 
    : values(width * height), width(width) { 
    } 

    double& value(unsigned int i, unsigned int j) { 
     return values[i + (width * j))]; 
    } 
}; 

Использование:

Matrix matrix(10, 20); 
matrix.value(3, 4) = 15; 
Смежные вопросы