РЕДАКТИРОВАТЬ: Если вы хотите матрицу стиля C ++, то я бы сначала рекомендовал boost::matrix
:
boost::matrix<float> my_matrix(n, m);
Если вы не можете использовать повышение, то я бы порекомендовал вектор векторов.
std::vector<std::vector<float> > m_matrix(n, std::vector<float>(m));
(обратите внимание на пробел после первого>, это необходимо, потому что >> является оператором в C ++).
Вы также можете использовать deque deques (или комбинацию векторов и deques). Большая разница в том, что векторы гарантируют, что элементы хранятся в непрерывном блоке памяти, а не в deque. Это может или не может быть хорошей вещью для ваших целей.
Запросы также более эффективны при вставке новых элементов в середину структуры.
Да, звонок новому может не состояться. Обычно, если вызов new завершается неудачей, он генерирует исключение std :: bad_alloc, которое вы можете перехватить. Поскольку вы переносите код с c на c ++, может быть проще использовать std :: nothrow, что приведет к тому, что new возвратит нулевой указатель (очень похоже на malloc).
try
{
my_array = new float[num_points];
}
catch(std::bad_alloc &exp)
{
...
}
или
my_array = new (std::nothrow) float[num_points];
if(m_array == NULL)
{
...
}