Heim >Backend-Entwicklung >C++ >Wie erstelle ich dynamische zweidimensionale Arrays in C?

Wie erstelle ich dynamische zweidimensionale Arrays in C?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-14 18:00:28130Durchsuche

How to Create Dynamic Two-Dimensional Arrays in C  ?

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> würde ein dynamisches zweidimensionales Array erstellen, aber dies kann aufgrund der mehreren beteiligten Indirektionsebenen zu Geschwindigkeit und Speicheraufwand führen.

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!

Stellungnahme:
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