Maison >développement back-end >C++ >Comment puis-je créer des tableaux bidimensionnels dynamiques en C en fonction des entrées de l'utilisateur ?
Introduction
Création d'un tableau bidimensionnel dynamique pouvant être personnalisé en fonction des entrées de l'utilisateur pose des défis en programmation C. Bien que les tableaux aient généralement des tailles fixes lors de la déclaration, cette tâche particulière nécessite une certaine flexibilité dans la détermination de la taille. Explorons différentes approches pour allouer et manipuler dynamiquement de tels tableaux.
Approche des vecteurs de vecteurs
Un vecteur de vecteurs (vecteur
int n; cin >> n; vector<vector<int>> matrix(n, vector<int>(n));
Classe de matrice personnalisée
Une autre option consiste à implémenter une matrice personnalisée classe qui encapsule la fonctionnalité de gestion dynamique d’un tableau à deux dimensions. Cette approche offre plus de contrôle sur la structure des données et permet une gestion efficace de la mémoire.
template <class T> class Matrix { int columns_; 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]; } };
Surcharges multiples de l'opérateur[]
Il est également possible de mettre en œuvre des tableaux bidimensionnels utilisant plusieurs surcharges de l'opérateur []. Cette approche exploite les proxys pour accéder indirectement aux données, offrant une syntaxe similaire à l'accès traditionnel aux tableaux.
template<class T, int size> class Matrix3 { T data[size][size][size]; class Proxy { Matrix3& m_; int index1_, index2_; }; class Proxy2 { Matrix3& m_; int index_; }; public: Proxy2 operator[](int index) { return Proxy2(*this, index); } Proxy operator[](int index1, int index2) { return Proxy(*this, index1, index2); } };
Conclusion
Chaque approche offre différents niveaux de flexibilité et d'efficacité. et la facilité de mise en œuvre. L'approche vecteur de vecteurs est simple mais peut avoir des implications en termes de performances en raison des multiples niveaux d'indirection. La classe de matrice personnalisée offre plus de contrôle sur la gestion de la mémoire et la flexibilité. L'approche des surcharges multiples de l'opérateur[] permet d'accéder aux éléments en utilisant une syntaxe familière, mais nécessite une implémentation plus complexe. En fin de compte, le choix dépend des exigences spécifiques de l'application.
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!