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
Libérer: 2024-12-14 18:00:28
original
124 Les gens l'ont consulté

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]; }
};
Copier après la connexion

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); }
};
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal