Erstellen dynamischer zweidimensionaler Arrays in C
In C umfasst die traditionelle Methode zum Deklarieren eines Arrays die Angabe seiner Dimensionen zur Kompilierungszeit. Was aber, wenn Sie ein Array erstellen müssen, dessen Größe dynamisch basierend auf Benutzereingaben bestimmt wird?
Vektor von Vektoren: vector
Ein Ansatz besteht darin, einen Vektor von Vektoren zu verwenden. Ein Vektor
Benutzerdefinierte Matrixklasse
Für optimale Um die Leistung zu verbessern, sollten Sie die Erstellung einer benutzerdefinierten Matrixklasse in Betracht ziehen:
template <class T> class matrix { int columns_; std::vector<T> data; public: matrix(int columns, int rows) : columns_(columns), data(columns * rows) {} T& operator()(int column, int row) { return data[row * columns_ + column]; } };
Diese Klasse ermöglicht den Zugriff auf Matrixelemente mithilfe eines prägnanten Operators(), der die Syntax von a imitiert zweidimensionales Array.
Beispielmatriximplementierung
Als Referenz finden Sie hier eine statisch zugewiesene 3D-Matriximplementierung, die mehrere Ebenen von Proxys verwendet, um die Operator[]-Syntax zu unterstützen:
template<class T, int size> class matrix3 { T data[size][size][size]; friend class proxy; friend class proxy2; class proxy { matrix3& m_; int index1_, index2_; public: proxy(matrix3& m, int i1, int i2) : m_(m), index1_(i1), index2_(i2) {} T& operator[](int index3) { return m_.data[index1_][index2_][index3]; } }; class proxy2 { matrix3& m_; int index_; public: proxy2(matrix3& m, int d) : m_(m), index_(d) {} proxy operator[](int index2) { return proxy(m_, index_, index2); } }; public: proxy2 operator[](int index) { return proxy2(*this, index); } };
Verwendung
Beide Implementierungen können sein Wird zum Erstellen und Bearbeiten dynamischer zweidimensionaler Arrays mit der bekannten C-Syntax verwendet.
Das obige ist der detaillierte Inhalt vonWie erstelle ich dynamische zweidimensionale Arrays in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!