In vielen Programmierszenarien ist es notwendig, Arrays oder Matrizen mit Größen zu erstellen, die beim Kompilieren nicht bekannt sind. Zeit. Dies stellt eine Herausforderung dar, da Arrays normalerweise feste Abmessungen haben. C bietet jedoch Mechanismen zur dynamischen Zuweisung von Speicher zur Laufzeit und ermöglicht so die Erstellung von Arrays mit Größen basierend auf Benutzereingaben.
Ein Ansatz zum Erstellen eines dynamischen zweidimensionalen Arrays Array besteht darin, einen Vektor von Vektoren zu verwenden. Dazu gehört die Definition eines Vektors, der andere Vektoren speichert und so effektiv eine Matrixstruktur erstellt. Zum Beispiel:
std::vector<std::vector<int>> matrix(N);
Dadurch wird eine N-mal-N-Matrix erstellt, in der jedes Element in den inneren Vektoren eine Zelle in der Matrix darstellt. Es ist jedoch wichtig zu beachten, dass die Größe jedes inneren Vektors individuell geändert oder ihm Werte zugewiesen werden müssen, was ihn im Vergleich zu anderen Methoden weniger speichereffizient macht.
Eine Alternative Der Ansatz besteht darin, eine Wrapper-Klasse zu erstellen, die die Matrixdarstellung abstrahiert und die dynamische Speicherzuweisung übernimmt. Hier ist ein Beispiel:
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 definiert eine dynamische Matrix vom Typ T, wobei der Konstruktor die Anzahl der Spalten und Zeilen zuweist und die Funktion „operator()“ intuitiv den Zugriff auf die Elemente der Matrix ermöglicht Zeilen- und Spaltenindizes.
Eine andere Technik besteht darin, den Array-Indexoperator ([]) zu überladen. Dies ermöglicht uns den Zugriff auf Matrixelemente mithilfe der bekannten Syntax:
class Matrix { int columns_; std::vector<T> data; public: Matrix(int columns, int rows) : columns_(columns), data(columns * rows) {} T& operator[](const std::pair<int, int>& indices) { return data[indices.first * columns_ + indices.second]; } };
Mit diesem Ansatz können wir auf die Matrixelemente zugreifen über:
T& element = matrix[std::make_pair(row, column)];
Die Wahl der Methode hängt von der jeweiligen Situation ab Kontext und Leistungsanforderungen. Unabhängig davon, ob ein Vektor aus Vektoren, eine Wrapper-Klasse oder eine Operatorüberladung verwendet wird, bieten diese Techniken die Flexibilität, dynamische zweidimensionale Arrays in C zu erstellen und zu bearbeiten.
Das obige ist der detaillierte Inhalt vonWie kann ich in C basierend auf Benutzereingaben zweidimensionale Arrays mit dynamischer Größe erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!