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 :

découper un vecteur en sous vecteur


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 112
    Par défaut découper un vecteur en sous vecteur
    Salut tout le monde,
    Je travaille avec une structure composée de deux vecteurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct IndiceCouverture
    {
    	std::vector<int> ind_exemple;
    	std::vector<int> ind_attr;	
    };
    je veux découper le deuxième vecteur selon le premier.Je m'explique encore plus:
    par exemple:
    ind_exemple<1,1,1,1,2,2,2,2,3,3,3,4,4,4,5,5,5...>
    ind_attr<1,2,4,3,1,2,4,3,1,2,4,1,2,3,1,2,3...>

    Je veux développer une fonction qui prend en entrée cette structure et l'indice sur lequel on va découper le second vecteur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    std::vector <int> get_intent(IndiceCouverture* I,int j)
    {
    int taille=0;
    std::vector<int> res;
    while(taille<I.ind_exemple.size())
    {
    if(I.ind_exemple[taille]==j)
    taille++;
    res.push_back(I.ind_attr[taille]);
    }
    return res;
    }
    ça me ramène 3 erreurs du genre "error C2228: left of '.ind_exemple' must have class/struct/union type".
    Pourriez vous m'expliquer pourquoi cette fonction ne marche pas?J'arrive pas a détecter la cause.Merci da'vance

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 112
    Par défaut
    Bon j'ai essayé de changer ainsi ça me retourne plus d'erreur sauf que la fonction ne me ramène pas le résultat souhaité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    std::vector <int> get_intent(struct IndiceCouverture I,int j)
    {
    int taille=0;
    std::vector<int> res;
    while(taille<I.ind_exemple.size())
    {
    if(I.ind_exemple[taille]==j)
    taille++;
    res.push_back(I.ind_attr[taille]);
    }
    return res;
    }
    J'appelle cette fonction et j'affiche le contenu du vecteur pour tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    std::vector <int> d;
    d= get_intent(ct,1); // ct est de type struct IndiceCouverture et contient déjà des valeurs
    for (int e=0;e<d.size();e++)
    {
    	cout<<d[e];
     
    }
    Comment pourrais je corriger ça?Merci encore

  3. #3
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Par défaut
    Le résultat que tu souhaite c'est (1,2,4,3) (les 4 premières valeurs du 2eme vecteur) ?
    Difficile de deviner rien qu'avec le code...

    D'ailleurs, si on l'indente correctement, ton code devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    std::vector<int> get_intent(IndiceCouverture I, int j)
    {
        int taille=0;
        std::vector<int> res;
        while (taille < I.ind_exemple.size())
        {
            if (I.ind_exemple[taille] == j)
                taille++;
     
            res.push_back(I.ind_attr[taille]);
        }
        return res;
    }
    ... on voit alors qu'il donne une boucle infinie si, par malheur, "I.int_exemple[0]" ne vaut pas "j"...
    En inversant les deux lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            if (I.ind_exemple[taille] == j)
                res.push_back(I.ind_attr[taille]);
     
            taille++;
    ... on obtient le résultat que, je suppose, tu recherche.

    Ps : Petite note en passant : pas besoin de mettre "struct" devant IndiceCouverture après l'avoir défini.
    Et si tu veux éviter une copie inutile, utilise les références constantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::vector<int> get_intent(const IndiceCouverture& I, int j)
    {
        ...
    }

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/08/2011, 14h15
  2. indices d'un sous-vecteur
    Par piteon dans le forum MATLAB
    Réponses: 3
    Dernier message: 10/11/2008, 17h08
  3. Boost.uBlas et sous-vecteur de matrice
    Par Le Farfadet Spatial dans le forum Boost
    Réponses: 11
    Dernier message: 30/04/2008, 23h25
  4. Réponses: 1
    Dernier message: 25/12/2007, 22h23

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