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
Libérer: 2024-12-08 22:25:11
original
834 Les gens l'ont consulté

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

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

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

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!

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