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 :

Problème avec un vector


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 46
    Par défaut Problème avec un vector
    Bonjour à vous tous. J'ai vraiment besoin de votre aide. Je dois extraire chaque valeur unique présent dans mon vector de valeur. Par exemple mon vecteur de valeur peut avoir 1112223334456667778899,ect mais je désire qu'extraire 123456789. Ces valeurs uniques seront ensuite misent dans un nouveau vecteur appellé valeursUniques. Mais je comprend pas pourquoi il me marquer vector out of range quand il essais d'extraire la dernière donnée de mon vecteur valeur. Merci de votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	vector<double> p_valeursUniques;
     
    	for(int i= 0; i != p_s_valeurs.size(); ++i)
    		{
    		double valeursUniques;
     
    		if(p_s_valeurs[i] != p_s_valeurs[i+1])
    			{
    			valeursUniques= p_s_valeurs[i];
    			p_valeursUniques.push_back(valeursUniques);
    			}
    		}

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Pour un vecteur de size S, les indices vont de 0 à S-1.
    Donc avec ta boucle actuel, tu sort forcément du tableau en tentant d'accéder à la valeur d'indice S (qui n'existe pas).

    Pour que ton algo marche, il faut donc boucler de 0 à S-1-1 soit S-2 (car tu fait un i+1 à un momemnt)
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    tu parcours ton vecteur avec la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i= 0; i != p_s_valeurs.size(); ++i)
    et tu testes avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(p_s_valeurs[i] != p_s_valeurs[i+1])
    Donc à un moment, tu es "out of range" car tu testes avec une valeur plus grande que la taille de ton vector (p_s_valeurs[i+1])

    Il faudrait changer ta boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i= 0; i != p_s_valeurs.size() - 1; ++i)
    en faisant probablement un cas particulier si la taille de ton vecteur vaut 0
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    Membre éclairé
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Par défaut
    Bonsoir,
    je ne voudrais pas dire de connerie mais si je ne me trompe pas il est normal qu'il te renvoie cette erreur. En effet dès qu'il arrive au dernier bouclage tu fais le test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(p_s_valeurs[i] != p_s_valeurs[i+1])
    or i+1 est en dehors de ton vecteur => out of range

    Il faut rajouter une petite condition à ton test pour être sûr que tu n'es pas déjà sur le dernier élément


    [edit] : Oups j'arrive trop tard . Bha au moins t'as ta réponse décrite différemment ...

  5. #5
    Membre averti
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 46
    Par défaut
    Merci pour votre aide rapide Mais le problème c'est que j'ai besoin du dernier élément du vector sinon sa va fausser mes résultats pour mes calculs plus tard. Effectivement si j'ajoute le -1 à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i= 0; i != p_s_valeurs.size() - 1; ++i)
    sa marche mais le dernier élément de mon vecteur est pas pris en charge et il continu les instructions quand même.

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Et çà, c'est pas mieux ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    vector<double> p_valeursUniques;
    if(p_s_valeurs.size() != 0)
    {
       double valeursUniques = p_s_valeurs[0];
       for(int i= 1; i != p_s_valeurs.size(); ++i)
       {
          if(p_s_valeurs[i] != valeursUniques)
          {
             p_valeursUniques.push_back(valeursUniques);
             valeursUniques = p_s_valeurs[i];
          }
       }
    }
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  7. #7
    Membre éclairé Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <algorithm>
    #include <iterator>
    #include <vector>
     
    int main() {
      std::vector<double> v; 
      std::vector<double> v_unique
     
      // remplir v [...]
     
      std::unique_copy(v.begin(),v.end(),std::back_inserter(v_unique)); // faire une copie des elements uniques dans v_unique
    }

  8. #8
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par carlou135 Voir le message
    Bonjour à vous tous. J'ai vraiment besoin de votre aide. Je dois extraire chaque valeur unique présent dans mon vector de valeur. Par exemple mon vecteur de valeur peut avoir 1112223334456667778899,ect mais je désire qu'extraire 123456789. Ces valeurs uniques seront ensuite misent dans un nouveau vecteur appellé valeursUniques. Mais je comprend pas pourquoi il me marquer vector out of range quand il essais d'extraire la dernière donnée de mon vecteur valeur. Merci de votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	vector<double> p_valeursUniques;
     
    	for(int i= 0; i != p_s_valeurs.size(); ++i)
    		{
    		double valeursUniques;
     
    		if(p_s_valeurs[i] != p_s_valeurs[i+1])
    			{
    			valeursUniques= p_s_valeurs[i];
    			p_valeursUniques.push_back(valeursUniques);
    			}
    		}
    L'algorithme est incorrect. Il te faut
    * ajouter la première valeur du vecteur source dans le vecteur cible
    * commencer à 1
    * comparer i-1 et i.

    Ou utiliser la librairie standard, comme vdumont le fait si bien
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  9. #9
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par défaut
    Es-tu sur d'utiliser le bon container ? Un set (garantit sans doublons) peut remplacer avantageusement ton vector. Quelque chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    set<double> p_valeursUniques(p_s_valeurs.begin(),p_s_valeurs.end());
    Devrait suffir.

Discussions similaires

  1. [Debutant] problème avec les vectors
    Par julien.63 dans le forum Langage
    Réponses: 6
    Dernier message: 21/12/2007, 22h53
  2. problème avec class vector
    Par abdelmajid_daosabah dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 12/11/2007, 22h40
  3. Problème avec les vector
    Par lostchina dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/03/2007, 10h51
  4. Problème avec std::vector
    Par dhoorens dans le forum SL & STL
    Réponses: 4
    Dernier message: 31/12/2006, 14h27
  5. Problème avec std::Vector
    Par mister3957 dans le forum SL & STL
    Réponses: 8
    Dernier message: 16/02/2006, 10h18

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