Maison >développement back-end >C++ >Comment créer des tableaux bidimensionnels dynamiques en C ?

Comment créer des tableaux bidimensionnels dynamiques en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-14 18:00:28132parcourir

How to Create Dynamic Two-Dimensional Arrays in C  ?

Création de tableaux dynamiques bidimensionnels en C

En C , la méthode traditionnelle de déclaration d'un tableau consiste à spécifier ses dimensions au moment de la compilation. Cependant, que se passe-t-il si vous devez créer un tableau dont la taille est déterminée dynamiquement en fonction des entrées de l'utilisateur ?

Vecteur de vecteurs : vecteur>

Une approche consiste à utiliser un vecteur de vecteurs. Un vecteur> créerait un tableau bidimensionnel dynamique, mais cela peut introduire à la fois de la vitesse et une surcharge de mémoire en raison des multiples couches d'indirection impliquées.

Classe matricielle personnalisée

Pour une utilisation optimale performances, pensez à créer une classe matricielle personnalisée :

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]; }
};

Cette classe permet d'accéder aux éléments matriciels à l'aide d'un opérateur concis(), imitant la syntaxe d'un array.

Exemple d'implémentation de matrice

Pour référence, voici une implémentation de matrice 3D allouée statiquement utilisant plusieurs niveaux de proxys pour prendre en charge la syntaxe Operator[] :

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); }
};

Utilisation

Les deux implémentations peuvent être utilisées pour créer et manipuler des dynamiques tableaux bidimensionnels avec la syntaxe C familière.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn