Maison >développement back-end >C++ >Comment puis-je créer efficacement un tableau bidimensionnel dynamique en C basé sur la saisie de l'utilisateur ?

Comment puis-je créer efficacement un tableau bidimensionnel dynamique en C basé sur la saisie de l'utilisateur ?

DDD
DDDoriginal
2024-12-07 21:28:15539parcourir

How Can I Efficiently Create a Dynamic Two-Dimensional Array in C   Based on User Input?

Création d'un tableau bidimensionnel dynamique basé sur l'entrée de l'utilisateur

Dans certains scénarios de programmation, il peut être nécessaire de créer un tableau bidimensionnel tableau avec une taille déterminée par l’entrée de l’utilisateur. Alors que les tableaux traditionnels nécessitent des dimensions fixes lors de la déclaration, C propose des solutions pour résoudre ce problème.

Option 1 : Utiliser un vecteur de vecteurs

Un vecteur de vecteurs, noté vector>, peut être utilisé pour créer dynamiquement un tableau bidimensionnel. Cependant, cette méthode peut s'avérer inefficace en raison de déréférencements répétés de pointeurs, entraînant un ralentissement des performances.

Option 2 : Utilisation d'une classe matricielle personnalisée avec un opérateur de surcharge

Une méthode plus efficace L'approche implique la création d'une classe matricielle personnalisée qui gère l'allocation de mémoire et fournit un opérateur surchargé pour accéder aux éléments. Cette approche garantit une gestion efficace de la mémoire et des temps d'accès plus rapides.

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]; }
};

Dans cette implémentation, la classe matricielle conserve la taille des colonnes et un seul vecteur sous-jacent pour le stockage des données. L'opérateur surchargé() permet une syntaxe pratique de type indice pour accéder aux éléments.

Exemple d'utilisation :

matrix<int> myMatrix(5, 5); // Declare a 5x5 matrix

myMatrix(0, 0) = 10; // Set the (0, 0) element to 10
std::cout << myMatrix(0, 0); // Output the (0, 0) element, which should be 10

Conclusion

Cet article a exploré deux options pour créer des tableaux dynamiques bidimensionnels, offrant une alternative plus détaillée et plus performante à l'approche traditionnelle du vecteur de vecteurs. La classe matricielle personnalisée avec opérateur surchargé offre une gestion efficace de la mémoire et une vitesse d'accès améliorée, ce qui en fait un choix approprié pour les scénarios où les performances sont cruciales.

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