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
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!