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 ?

Comment puis-je créer des tableaux bidimensionnels dynamiques en C en fonction des entrées de l'utilisateur ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-08 22:25:11830parcourir

How Can I Create Dynamic Two-Dimensional Arrays in C   Based on User Input?

Déclaration de tableaux bidimensionnels dynamiques basés sur les 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>) peut servir comme solution pour créer dynamiquement une matrice. Dans cette approche, chaque vecteur interne représente une ligne de la matrice, tandis que le vecteur externe agit comme un conteneur pour ces lignes. La taille de la matrice peut être ajustée en modifiant simplement la taille du vecteur externe.

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!

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