Verwenden von rohen Zeigern für Ihre Arrays wie diese ist mehr C-Stil als C++. Verwenden Sie Vektor des Vektors (Indizierung ist immer noch sehr effizient).
size_t rows(5);
size_t columns(15);
vector<float> row(columns);
vector<vector<float>> matrix(rows, row);
matrix[0][0] = 0.1f;
Noch besser wäre es, den zugrunde liegenden Speicher in einer Matrix-Klasse wickelt, die die erforderlichen Matrix-Operationen implementiert, halten und erzwingen Dimensionen sorgen Matrizen für die Multiplikation kompatibel sind, und so weiter.
class Matrix
{
public:
Matrix(const int _rows, const int _cols) : rows(_rows), cols(_cols)
{
}
Matrix Multiply(const Matrix& rhs);
private:
vector<vector<float>> storage;
size_t rows;
size_t cols;
};
Matrix Matrix::multiply(const Matrix& rhs)
{
Matrix result(*this, rhs); // construct matrix of right dimensions
// multiply the operands
return result; // modern compilers do not copy construct the result
}
Wenn Ihre Matrix Anforderungen komplex sind, könnten Sie eine Bibliothek wie Boost.UBlas betrachten gegen Ihre eigene Rolle. Dies ist Vorlagencode und unterstützt Spezialisierungen für spärliche, diagonale und andere gebräuchliche Matrixtypen.
Es gibt einen großen Unterschied zwischen 'type arr [] []' und 'type ** arr'. Wähle ein. Beachten Sie auch, dass Ihr 'result' eine Stapelvariable ist und nach dem Beenden der Funktion nicht mehr existiert! – ruslik
Vielleicht mit einem std :: Vektor würde Ihr Leben einfacher http://www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c4027 – nabulke