2014-10-02 3 views
1

У меня есть класс Matrix, который выглядит примерно так:Как инициализировать 2D-массив в классе?

template<int R, int C> 
class Matrix{ 
public: 
    double matrix[R][C]; 
    Matrix(double n = 0)...{} 
    ... 
}; 

Matrix<2,3> m; 

Как инициализировать массив при создании новой матрицы с n в c'tor, без перебора всей ячейки массива клетки?

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

+1

Инициализировать его к чему, в "по умолчанию" или конкретное значение? – Niall

+0

Я упомянул, что хочу инициализировать его с помощью 'n', который я получаю как вход для c'tor (по умолчанию будет 0) – littlerunaway

+0

Вы можете использовать стандартный алгоритм, но они будут применять некоторую форму итерации в фоновом режиме так или иначе. Иначе вы играете свою собственную итерацию. «memset» может работать в этом случае, но, как вы сказали, это за столом. – Niall

ответ

0

Итерации по всей ячейке массива ячейки, используя ясный, простой, очевидный код. Если ваш компилятор разумен (и зачем его использовать, если это не так), он точно поймет, что вы делаете, и замените оптимальный механизм инициализации своей платформы.

+0

это единственный способ? Я надеялся, что есть что-то для этого. – littlerunaway

+0

Что вы подразумеваете под «ярлыком»? Вы имеете в виду меньше кода? –

+0

Я имею в виду, что я могу сделать что-то вроде этого 'int a [2] [3] = {0}', и я понимаю, что он инициализирует массив до 0, я надеялся, что есть способ сделать что-то подобное, когда он находится внутри класс – littlerunaway

1

Мой совет использовать алгоритмы StD везде, где это возможно:

std::for_each(std::begin(matrix), std::end(matrix), 
       [n](double* row) { std::fill_n(row, C, n); });  

Полный пример:

template<int R, int C> 
class Matrix{ 
public: 
    double matrix[R][C]; 
    Matrix(double n = 0) { 
     std::for_each(std::begin(matrix), std::end(matrix), 
         [n](double* row) { std::fill_n(row, C, n); });  
    } 
}; 
Смежные вопросы