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 :

r�f�rence � un vector


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    26
    D�tails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 26
    Par d�faut r�f�rence � un vector
    Bonjour,

    j'ai lu quelques postes � ce sujet mais je n'y ai pas trouv� les r�ponses que j'attendais.
    mon probl�me est que j'ai fait un programme douloureusement long
    alors jme suis dit qu'il y avait surement un probl�me, d'ou mon interet pour la question de recopie des vectors.

    dans les differents postes que j'ai lu, �a parlait surtout de mettre une reference � un vector comme variable d'entr�e d'une fonction.

    moi au contraire j'ai plusieurs fonctions qui renvoient des vectors, et d'autres fonctions qui utilisents des valurs de ces vectors.

    exemple :
    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
     
    vector<double> C1()
    {
      string line;
      ifstream myfile ("test2.txt");
     vector<double> coord;
     
      if (myfile.is_open())
      {
     
         int i=0;
     
        while ( getline (myfile,line))
          {
     
          stringstream ss(line);
     
    	double nombre1;
        double nombre2;
    	double nombre3;
    	char   sep;
     
     
    	while(ss >> nombre1 >> sep >> nombre2 >> sep >> nombre3)
    	    {
    		coord.push_back(nombre1);
    	    }
     
         ++i;
     
          }
     
        myfile.close();
      }
     
      else cout << "Unable to open file"; 
       return coord;
    }
    -> fonction qui cree un vector

    dans mes autres fonctions, j'utilise c1()[i] pour appeler i+1 �me valeur de mon vector.

    vaut-il mieux utiliser une reference? et si oui , comment faire ? ma fonction doit elle renvoyer une reference plutot que le vector, ou dois-je par la suite appeler une reference plutot que le vector?

    merci pour vos reponses!

  2. #2
    Membre �m�rite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par d�faut
    tu peux faire comme �a:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void C1( vector< double > & coord )
    {
     // remplit ton vector
    }
     
    int main()
    {
        vector< double > coord;
        C1( coord );
    }
    Sinon pour ton ifstream, tu n'as pas � appeler close(), ce serait fait automatiquement � la fin du scope.

  3. #3
    Membre �prouv�
    �tudiant
    Inscrit en
    Octobre 2007
    Messages
    189
    D�tails du profil
    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 189
    Par d�faut
    Avec cette fonction, utiliser une r�f�rence ferait, si tu as de la chance, planter ton application. Pourquoi ? Car tu utilises une variable "morte" : renseigne toi sur la dur�e de vie des variables et sur les blocs d'instructions.

    Ce qu'il faudrait faire pour optimiser ton application c'est de cr�er une seule fois ce vecteur ( et �ventuellement le recr�er si le fichier �tait modifi� ) . C�d :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    const vector<double>& vc1(C1());
    // ou
    vector<double> vc1(C1()); // s'il doit être modifié par la suite.
    Dans d'autre situation, si tu veux �viter la recopie inutile de vector tu peux faire qqch comme :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    void f(std::vector<int>& ret) {
      // modification de ret.
      // pas de return.
    }
    ...
    void g(void) {
      std::vector<int> vi; f(vi);
    }
    PS : tu devrais utiliser les exceptions dans C1 � mon avis ( quand le fichier ne peut �tre lu ) .

  4. #4
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    26
    D�tails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 26
    Par d�faut
    effectivement mon vector n'est plus modifi� par la suite donc je peux utiliser const.
    mais j'ai pas compris comment je devais l'�crire? dans le prototype de ma fonction?

  5. #5
    Membre �prouv�
    �tudiant
    Inscrit en
    Octobre 2007
    Messages
    189
    D�tails du profil
    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 189
    Par d�faut
    Non, dans le type de l'objet qui r�cup�re le vecteur. Comme ma premi�re ligne de code ci-dessus.

  6. #6
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    26
    D�tails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 26
    Par d�faut
    j'ai fait ce que Nikko34 sugg�rait. c'est d�sormais tr�s rapide (2s au lieu de 50s ).
    mais je me demande si on ne paut pas l'am�liorer encore car j'ai deux fonctions au debut desquelles je rappelle les vectors.
    en gros estce que je ne pourrai pas les creer une seule fois, en vector globaux?

  7. #7
    Membre �prouv�
    �tudiant
    Inscrit en
    Octobre 2007
    Messages
    189
    D�tails du profil
    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 189
    Par d�faut
    Disons que tout est possible, mais que g�n�ralement les variables globales montre un probl�me de conception.

  8. #8
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Si tu passes � chaque fois ton vecteur par r�f�rence � tes fonctions, je ne pense pas que l'utilisation de variable globale am�liore les perfs. Ce qui te p�nalisait avant �tait la recopie. En passant par r�f�rence, tu n'as plus de recopie. Je pense que tu devrais bencher ton code pour voir ce qui prend du temps et te concentrer l�-dessus.

Discussions similaires

  1. it�rer sur une r�f�rence constante de vector
    Par manonoc dans le forum SL & STL
    R�ponses: 1
    Dernier message: 17/08/2008, 12h50
  2. Retourner une r�f�rence sur un std::vector
    Par Rodrigue dans le forum C++
    R�ponses: 12
    Dernier message: 13/10/2007, 16h30
  3. attribut r�f�rence sur un vector
    Par youhil dans le forum SL & STL
    R�ponses: 2
    Dernier message: 28/05/2006, 20h27
  4. Probl�me avec vector par r�f�rence
    Par vdumont dans le forum SL & STL
    R�ponses: 11
    Dernier message: 09/05/2006, 08h25
  5. R�ponses: 8
    Dernier message: 26/08/2004, 18h59

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