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 mémoire vector


Sujet :

C++

  1. #1
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Février 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : chercheur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2011
    Messages : 78
    Par défaut Allocation mémoire vector
    Bonjour,

    Je cherche comment allouer dynamiquement la mémoire de mon vecteur : "newvector" ?
    Voici ma déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef std::vector<int> myvector;
    std::vector<myvector> newvector ;
    Je cherche à garder la mémoire du vecteur dans les différentes fonctions du code.

    Merci à vous

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 468
    Par défaut
    J'ai rien compris.

    Un std::vector alloue automatiquement et dynamiquement de la mémoire :

    http://www.cplusplus.com/reference/vector/vector/

    Le second argument template permet de définir un allocateur.

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Citation Envoyé par Student_Master Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef std::vector<int> myvector;
    std::vector<myvector> newvector ;
    Tu sûr de vouloir écrire ça?
    Là tu es en train de créer un std::vector<std::vector<int>>.
    C'est possible que ce soit ce que tu veux, mais généralement un vector de vector ça signe une conception plutôt légère...
    Sinon, comme le fait remarquer bacelar, std::vector alloue déjà dynamiquement.

  4. #4
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Février 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : chercheur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2011
    Messages : 78
    Par défaut
    J'approfondie pour vous expliquer plus mon problème avec des extraits du code.

    La déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int		  NbrInfClasse[maxR];
    std::map<int, int> tokens;
    int totalsize = sizeof(tokens); 
    int NombreClasses = 0;
    map<int,int>::iterator iter;
    typedef std::vector<int> myvector;
    std::vector<myvector> newvector ;
    Dans le code suivant je liste les ressources dans chaque classe.

    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
    /*affichage de la liste des ressources dans chaque classe*/
    	  for(iter=tokens.begin(); iter!=tokens.end(); ++iter){
    		  cerr<<"ma classe contient les ressources : ";
    		for (int cpt=0;cpt<newvector[iter->second].size();cpt++){ // taille de chaque classe
    			std::vector<int> x; 
    			x=newvector[iter->second];
    			cerr<< x[cpt] <<'\t';
    		}
    		cerr << "\n";
    	  }
    	  /*Generer le nombre de ressources par classe*/
    	  for (int i=0;i<NombreClasses;++i){// nbr de classes
    		  NbrInfClasse[i]=newvector[i].size();
    		  cerr << "nombreRP =  " << NbrInfClasse[i] << endl;
    	  }
    Dans la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void generateInstance(int seed, char* filename )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    fp<<"classe ressources " << endl;
    			  fp <<"\n";
    			  for (c=0;c<NombreClasses;c++){ // nombre total de classes
    				  fp<<"newvector["<< c << "] / " << NbrInfClasse[c] << " = { ";
    				  for (int t=0;t<NbrInfClasse[c];t++){
    					  std::vector<int> x;
    					  x=newvector[c];
    					  fp<< x[t] << " ";
    					  }
    				  fp << "}" << endl;
    				}
    			  fp <<"\n";
    me permet d'avoir le résultat suivant (par exp) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    newvector[0] / 1 = { 0 }
    newvector[1] / 1 = { 1 }
    newvector[2] / 1 = { 2 }
    newvector[3] / 1 = { 3 }
    Maintenant, j'ai besoin de lire mon fichier.
    Dans une nouvelle fonction appelée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void loadinstance(char* filename)
    J'écris ça :
    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
    for (k=0;k<NombreClasses;k++){
    			fp>>buf; // newvector
    		//	cerr <<" "<< buf ;
    			fp>>bufc; //[
    		//	cerr <<" "<< bufc ;
    			fp>>buf; // numero de la classe
    		//	cerr <<" "<< buf ;
    			fp>>bufc; //]
    		//	cerr <<" "<< bufc ;
    			fp>>bufc; // /
    		//	cerr <<" "<< bufc ;
    			fp>>NbrInfClasse[k];
    			cerr << " valeur vide ! " << NbrInfClasse[k]; // je dois lire le nombre de ressources  dans chaque classe
    			fp>>bufc; // = 
    		//	cerr <<" "<< bufc ;
    			fp>>bufc; // {
    		//	cerr <<" "<< bufc ;
    			for (int t=0;t<NbrInfClasse[k];t++){ // taille de chaque classe
    				 fp>>x[t]; // je dois lire le contenu de chaque classe : le numéro de la ressource
    			}
    			cerr << "}" << endl;
    			//fp>>bufc; // }
    			//cerr <<" "<< bufc ;
    			//cerr << "\n" ;
    		}
    Dans ce code, je trouve deux erreurs que je ne suis pas arrivé à résoudre. Comment récupérer la bonne valeur de et le numéro de la ressource.
    J'espère que tout est clair maintenant
    Merci de votre aide !

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

    Informations professionnelles :
    Activité : aucun

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

    Je n'ai pas lu tout ton code, mais je crains très fort que le code int totalsize = sizeof(tokens); ne fasse sans doute pas ce que tu veux.

    Comme je n'ai pas lu tout le code, je ne sais pas comment tu veux utiliser cette valeur totalsize, mais, selon quoi, à quoi va-t-elle correspondre si tu veux retrouver le nombre d'élément qui se trouvent dans une std::map, ca se fait en utilisant la fonction membre size(), comme pour toutes les collections offertes par la STL
    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

  6. #6
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Février 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : chercheur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2011
    Messages : 78
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Salut,

    int totalsize = sizeof(tokens); ne fasse sans doute pas ce que tu veux.
    Il n'a aucune influence sur mon code, si tu as suivi tout le reste car je l'utilise pas. J'aurais pu l'enlever mais j'ai oublié.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 468
    Par défaut
    En gros, t'arrives pas à extraire le nombre de valeurs et la liste de valeurs dans une expression comme ci-dessous :
    newvector[3] / 1 = { 3 }
    Désolé, mais moi je suis fainéant, j'utilise un framework de serialisation/désérialisation pour ne pas m'emmerder avec des trucs avec aussi peu de valeur ajoutée.
    Et même si j'en n'ai pas, je ne me fais pas chier avec les opérateurs de flux, qui sont beaucoup trop fragile aux erreurs de saisie.

    Je récupère la ligne, une regex et roule ma poule :
    http://www.cplusplus.com/reference/regex/

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

Discussions similaires

  1. std::list, std::vector et allocation mémoire
    Par buzzkaido dans le forum SL & STL
    Réponses: 20
    Dernier message: 15/06/2007, 15h58
  2. Limite Allocation Mémoire d'un tableau d'entier
    Par l9ft b9hind dans le forum C++
    Réponses: 5
    Dernier message: 27/10/2005, 19h29
  3. Allocation mémoire
    Par DestyNov@ dans le forum C++
    Réponses: 9
    Dernier message: 23/08/2005, 08h09
  4. [Pointeur] Allocation mémoire
    Par Rayek dans le forum Langage
    Réponses: 22
    Dernier message: 20/05/2005, 10h26
  5. Allocation mémoire dynamique
    Par ITISAR dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/01/2005, 09h59

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