Dynamische zweidimensionale Arrays basierend auf Benutzereingaben
Da wir die Notwendigkeit dynamischer Arrays bei der Arbeit mit Matrizen verstehen, untersuchen wir verschiedene Ansätze, um dies zu erreichen diese Flexibilität in C .
Vektor von Vektoren (vector
Ein Vektor von Vektoren, der eine Matrix darstellt, erfordert benutzerdefinierte Klassen, um den Zeilen- und Spaltenzugriff zu handhaben. Während diese Methode dynamisch veränderbare Arrays ermöglicht, kann sie aufgrund verschachtelter Zeiger und Speicheraufwand zu Ineffizienzen führen.
Matrix-Wrapper-Klassenvorlage
Ein alternativer Ansatz besteht darin, eine zu erstellen Vorlagenklasse, die einen einzelnen Vektor umschließt. Der Wrapper verfolgt die Matrixform und stellt Zugriffsfunktionen bereit:
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 bietet bequemen Indexzugriff mit Operator() anstelle von Operator[].
Überladender Operator[ ] für mehrere Dimensionen
Für diejenigen, die die Operator[]-Syntax bevorzugen, ist es möglich, sie in einer verschachtelten Klasse zu überladen Struktur:
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); } };
Dieser Ansatz bietet Matrixzugriff im C-Stil, erfordert jedoch möglicherweise etwas Boilerplate-Code.
Wenn Sie diese Optionen verstehen, können Sie bei der Arbeit den am besten geeigneten Ansatz für Ihre spezifischen Anforderungen auswählen mit dynamischen zweidimensionalen Arrays im Matrixkontext.
Das obige ist der detaillierte Inhalt vonWie implementiert man dynamische zweidimensionale Arrays in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!