Heim > Backend-Entwicklung > C++ > Wie kann ich in C basierend auf Benutzereingaben zweidimensionale Arrays mit dynamischer Größe erstellen?

Wie kann ich in C basierend auf Benutzereingaben zweidimensionale Arrays mit dynamischer Größe erstellen?

Susan Sarandon
Freigeben: 2024-11-29 04:08:08
Original
806 Leute haben es durchsucht

How Can I Create Dynamically Sized Two-Dimensional Arrays in C   Based on User Input?

Zweidimensionales Array mit dynamischer Größe basierend auf Benutzereingaben

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.

Verwendung von STL-Vektoren von Vektoren

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);
Nach dem Login kopieren

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.

Verwendung einer Matrix-Wrapper-Klasse

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]; }
};
Nach dem Login kopieren

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.

Array-Indexoperator überladen

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]; }
};
Nach dem Login kopieren

Mit diesem Ansatz können wir auf die Matrixelemente zugreifen über:

T& element = matrix[std::make_pair(row, column)];
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage