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

SL & STL C++ Discussion :

Besoin de précision, Paire d'Itérateur


Sujet :

SL & STL C++

  1. #1
    Membre éclairé
    Avatar de Floréal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 456
    Par défaut Besoin de précision, Paire d'Itérateur
    Bonjour,
    Je suis entrain de développer une application qui a pour but de récupérer, à partir d'un ou plusieurs fichier(s) XML, les applications installées sur plusieurs machines Windows Server (un document XML par machine en fait), ces fichiers sont générés pas un produit qui scanne plusieurs choses où il serait succeptible de trouver des informations installées (dossier progam files, base de registre, etc.). Je ne dois ni avoir deux fois la même applications, ni deux fois la même machine.
    Bien que j'ai lu les documentations de SGI et les FAQ et autres tutoriels, je n'arrive pas a avoir les idées claires concernant un petit point de détail, mais qui dans mon contexte a son importance.
    J'ai fais le choix de déclarer une classe Registre, décrite ainsi:
    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
    class Registre
    {
    private:
      Registre();
      Registre(const Registre &);
      virtual ~Registre();
      typedef std::pair<std::vector<Machine>::iterator, std::vector<Application>::iterator> paire_;
      std::vector<paire_> liens_;
      std::vector<Machine> machines_;
      std::vector<Application> applications_;
     
    public:
      inline static Registre& getInstance() {
        static Registre instance;
        return instance;
      };
      void addMachine(const Machine& machine);
      void addApplicationTo(const Application& application, const Machine& machine);
    };
    Ma question portera sur cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      typedef std::pair<std::vector<Machine>::iterator, std::vector<Application>::iterator> paire_;
    Lorsque je déclare une paire_ de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    paire_ lien(find(machines_.begin(), machines_.end(), machine), find(applications_.begin(), applications_.end(), application));
    je devrais normalement créer une paire avec:
    • Pour le membre "first": Un iterateur constant sur un vecteur de Machine.
    • Pour le membre 'second': Un iterateur constant sur un vecteur d'Application.


    Si j'écris un code comme celui ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      applications_[0].setVersion("3.0");
    tous les itérateurs pointant vers cette application auront une version "3.0"?
    Je vous remercie par avance de vos réponse,
    Floréal

    PS: Je n'ai jusqu'alors pas rencontré de problème de compilation.

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 292
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    il faut faire attention avec l'algorithme find(). Car (il en va de même pour la plupart des algorithmes), l'itérateur qu'il retourne n'est pas forcément déréférençable. En effet, si find() ne trouve pas l'élément recherché, il retourne end(), qui est un itérateur particulier et qui n'est pas déréférençable.

    Concrètement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    paire_ lien(find(machines_.begin(), machines_.end(), machine), find(applications_.begin(), applications_.end(), application));
    ça va créer une paire_ qui contiendra des pointeurs invalides si les find() ne trouvent pas les éléments recherchés (machine et application).

    Citation Envoyé par Floréal
    Si j'écris un code comme celui ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    applications_[0].setVersion("3.0");
    tous les itérateurs pointant vers cette application auront une version "3.0"?
    Oui.

  3. #3
    Membre éclairé
    Avatar de Floréal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 456
    Par défaut
    Merci beaucoup pour cet éclaircissement.
    Pas d'inquiétude. En fait je n'utilise l'algorithme find (pour plus de comodités) que lorsque je suis sur de pouvoir trouver les deux parties de la paire (après insersion de la machine de l'application, ou lorsque j'ai déjà la machine ou l'application dans mes vecteurs).
    Je flague le thread en "résolu".

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

Discussions similaires

  1. [SOAP] besoin de précision
    Par Louis-Guillaume Morand dans le forum Services Web
    Réponses: 1
    Dernier message: 05/03/2007, 21h10
  2. [POO Basique] Besoin de précision sur une notion de base
    Par alois.cochard dans le forum Langage
    Réponses: 8
    Dernier message: 15/09/2006, 09h01
  3. tableau mutlidim, besoin de précision
    Par tuxout dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 25/08/2006, 11h36
  4. [VB.NET]Besoin de précision pour architecture 3-tiers
    Par Dnx dans le forum Windows Forms
    Réponses: 8
    Dernier message: 14/09/2005, 09h09
  5. Besoin de précision sur TThread
    Par psau dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/02/2005, 23h35

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