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 :

Quelqu'un peut me rappeler la différence


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2008
    Messages : 62
    Par défaut Quelqu'un peut me rappeler la différence
    Bonjour

    Quelqu'un peut me rappeler la différence entre ces déclarations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    vector <objet> A
    vector <objet> *A
    vector <objet> **A
    ça fait logntemps que je n'ai pas travailler avec c++

  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
    T'en fait pas, la seule que tu ais à connaître c'est :


    Sinon

    type * A c'est un pointeur
    type ** A c'est équivalent à un tableau de pointeurs

    Et sinon en C++:

    " cont Type & A " ça te parle?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2008
    Messages : 62
    Par défaut
    Merci Nikko

    Mais si je veux un vector de vector<objet> ?

    Et sinon en C++:

    " cont Type & A " ça te parle?
    NON !

  4. #4
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::vector< std::vector < object > >
    Sinon regarde dans la FAQ les références, les const etc, c'est important

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 636
    Par défaut
    Salut,
    Citation Envoyé par nikko34 Voir le message
    T'en fait pas, la seule que tu ais à connaître c'est :


    Sinon

    type * A c'est un pointeur
    type ** A c'est équivalent à un tableau de pointeurs

    Et sinon en C++:

    " cont Type & A " ça te parle?
    Si ce n'est que, dans le code présenté, le type de A est déjà... un vector (que je vais considérer, à défaut de plus de précision comme étant... std::vector)...

    De ce fait
    • vector<objet> A est... un tableau d'objets
    • vector<objet> * A est un pointeur sur un tableau d'objets
    • vector<objet> ** est un pointeur de pointeur sur un tableau d'objet
    Sachant que la gestion de pointeurs (ou de pointeurs de pointeurs) est souvent associée à la gestion dynamique de la mémoire, on aurait tendance à dire que
    • vector<objet> * A aurait pour but de permettre l'allocation dynamique de mémoire pour tableau (C style) de tableaux d'objets
    • vector<objet> ** A aurait pour but de permettre l'allocation dynamique de mémoire pour un tableau (C style) à deux dimensions de tableaux d'objets
    Sauf que...

    De manière générale, il n'est vraiment pas bon de manipuler des pointeurs sur les collections fournies par le standard.

    En effet, std::vector fournit une interface capable de rendre tous les services rendus par un tableau "C style" tout en évitant, justement, d'avoir à recourir à la gestion a mano de la mémoire nécessaire pour représenter les différents éléments de ce tableau

    Vouloir gérer a mano un tableau de tableau d'éléments (qui pourrait donc passer pour un tableau à deux dimensions de ces élément) revient à... s'apprêter à se tirer une balle dans le pied, et c'est encore pis si l'idée est... d'essayer de gérer a mano un tabeaux deux dimensions de ce tableau d'éléments (qui passerait donc pour un... tableau à trois dimensions d'éléments)

    Ceci est valide lorsque l'on se place du point de vue d'une déclaration de variable

    Maintenant, en C, les pointeurs (et les pointeurs de pointeurs) sont souvent utilsés afin de permettre à une fonction de modifier un argument qui leur est passé, l'appel de la fonction se faisant en transmettant "l'adresse de l'objet" servant d'argument.

    De manière générale, l'utilisation de l'opérateur "address of" afin de passer un argument modifiable à une fonction est une pratique qu'il vaut mieux éviter en C++ au profit de l'utilisation des références, qui peuvent être constantes si le but est "simplement" d'éviter la copie de l'objet passé en argument.

    En effet, les références présentent un certain nombre d'avantages par rapport aux pointeurs, dont, entre autres, la garantie de non nullité:

    Si un argument est une référence sur un objet, l'objet en question doit d'office exister.

    Si un argument est une référence constante sur un objet, nous pouvons, au mieux, et sous certaines conditions, utiliser une variable temporaire non nommée créée spécialement à l'occasion de l'appel de la fonction

    Au final, je crois que l'on peut dire que, si tu rencontre une de ces trois lignes dans un code C++, tu es largement en droit de te montrer prudent, pour ne pas dire inquièt, quant au but recherché par le code (c'est pire encore s'il apparait dans un cours ou un tutorial )
    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é
    Profil pro
    Inscrit en
    Février 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2008
    Messages : 62
    Par défaut
    Merci beaucoup koala01

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

Discussions similaires

  1. [Access] peut-on sortir la différence de 2 requetes?
    Par zorba49 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/03/2006, 15h19
  2. Aide sur visual basic?? Quelqu'un peut-il m'aider?
    Par lilipika dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 02/03/2006, 15h03
  3. Quelqu'un peut il m'expliquer le fonctionnement de 'yield'
    Par Kczav dans le forum Général Python
    Réponses: 2
    Dernier message: 01/03/2006, 10h53
  4. L'erreur 3734, quelqu'un peut-il m'aider
    Par charleshbo dans le forum Access
    Réponses: 1
    Dernier message: 21/02/2006, 16h53

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