Heim > Backend-Entwicklung > C++ > Wie implementiert man dynamische zweidimensionale Arrays in C?

Wie implementiert man dynamische zweidimensionale Arrays in C?

Mary-Kate Olsen
Freigeben: 2024-12-02 18:53:12
Original
921 Leute haben es durchsucht

How to Implement Dynamic Two-Dimensional Arrays in C  ?

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

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

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!

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