IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Allocation dynamique de tableau de dimensions variables


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 106
    Par défaut Allocation dynamique de tableau de dimensions variables
    Bonjour;
    Je cherche à allouer dynamiquement un tableau dont toutes les dimensions sont variables. Pour un tableau dont seul le nombre de lignes varie, je procède comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    int main()
    {
    	int k;
    	float x;	 
    	int cpt=0;	//Compteur de colonnes
    	int cpt1 = 0;//compteur de lignes
     
    	ifstream data("D:\\SignauxTexte\\donnes.txt",ios::in);
    	cout<<"donner une valeur: ";
    	cin>>k;
    	float (*Matrice)[100] =new float[k][100]; //Matrice de k lignes de 100 colonnes
    	while(true)
       {
       data >> x; 
       // test si fin de fichier atteinte
       if(data.eof() == true)
          break; 	
    	if(k!=0)
    	{	
    		if(cpt>=100){cpt=0;} // réinitialisation du compteur de colonnes
    		else
    		{
    			if(cpt1<k)
    			{
    			Matrice[cpt1][cpt] = x; //Remplissage de la matrice
    			cout<<"["<<cpt1<<" "<<cpt<<"]"<<" "<<Matrice[cpt1][cpt]<<endl;
    			cpt++;
    			if(cpt==99){cpt1++;}
    			}
     
    		}
     
     
    	}
     
    	}
    	delete[] Matrice;
    	return 0;
     
    }
    Maintenant je souhaite entrer la seconde dimension de mon tableau comme la première au clavier. J'ai lu des cours où on dit qu'il faut utiliser un tableau de pointeurs mais je ne sais pas comment procéder (je ne m'en sors pas avec les pointeurs). je voulais aussi savoir comment est-ce possible de faire varier le nombre de colonnes en gardant celui des lignes fixe.
    D'avance merci pour votre aide.

  2. #2
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 287
    Par défaut
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Membre éclairé Avatar de SmOkEiSBaD
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2008
    Messages : 234
    Par défaut
    Jette un coup d'oeil à la FAQ, sinon sur internet tu doit trouver des exemples de Matrices dynamiques.

    Pour déclarer un tableau de pointeur tu rajoute une étoile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    float * Matrice ou float Matrice[] //Tableau de float
    float ** Matrice ou float * Matrice[] ou float Matrice[][] //Tableau de pointeurs sur float

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    boost multi_array

  5. #5
    Membre éclairé Avatar de SmOkEiSBaD
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2008
    Messages : 234
    Par défaut
    Citation Envoyé par loufoque Voir le message
    boost multi_array
    Pourquoi faire simple quand on peut faire compliquer ?

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 633
    Par défaut
    Salut,

    De manière générale, il faut éviter le recours à l'allocation dynamique si tu peux faire autrement... ou, du moins, laisser les classes dont on peut partir du principe qu'elles la gère mieux que toi s'en occuper.

    Alors qu'il n'y a pas le choix en C, le C++ fournit une série de conteneurs dont on est sur que la gestion de la mémoire les concernant se fera parfaitement.

    L'idée est donc de n'utiliser l'allocation dynamique de la mémoire que lorsqu'il s'agit de créer une instance d'une classe donnée alors que le pointeur que l'on utilise est du type d'une classe de base (pour implémenter le polymorphisme, principalement )...ou en cas d'absolue nécessité
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 287
    Par défaut
    Citation Envoyé par SmOkEiSBaD Voir le message
    Pourquoi faire simple quand on peut faire compliquer ?
    Parce que ce que tu crois simple n'est nullement robuste ? (tu verrais vite à quel point ce n'est pas trivial sinon)

    @OP, boost.multi_array, stlsoft.array2D, etc. Les choix ne manquent pas.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/06/2007, 14h15
  2. [débutant] un tableau de dimension variable selon l'objet qui le contient
    Par Epistocles dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 09/01/2007, 18h07
  3. Réponses: 2
    Dernier message: 14/12/2006, 15h34
  4. Réponses: 6
    Dernier message: 26/11/2005, 19h55
  5. Réponses: 4
    Dernier message: 03/12/2002, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo