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 :

Supprimer des éléments consécutifs dans un vector


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 95
    Par défaut Supprimer des éléments consécutifs dans un vector
    Bonjour à toute la communauté,

    Je cherche un algorithme capable de supprimer des valeurs consécutives (mais pas égales) dans un vector.

    Par exemple, j'ai le vecteur contenant les valeurs suivantes :

    1 2 3 4 6 7 9 11 14 15 36 37 38 39 40

    Je veux obtenir le vecteur suivant

    2 6 9 11 14 38

    En gros, conserver la valeur du milieu pour toutes les valeurs consécutives (ex: on conserve le 38 dans les valeurs 36 37 38 39 40)

    Je suis libre d'utiliser un vector ou une list. Je connais la fonction unique d'une list mais je pense pas que je puisse m'en servir dans mon cas

    Merci d'avance pour votre aide

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    rapidement un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    for ( int i = 0 ; i < taille_de_la_liste ; )
    {
    	for ( int j = i ; j < taille_de_la_liste-1 && liste[j]+1 == liste[j+1] ; j++ )
    		{;}
    	new_liste.push_back(liste[i+j/2]);
    	i+=j;
    }
    *

    Très rapidement
    liste ... c'est la liste de base.
    new_liste sera la nouvelle
    ( mon algo marcherai facilement sur les vector ... c'est juste que j'ai pas donné de bon nom au variable )

    Pour expliquer , tu fais une boucle pour parcourir tout le tableau
    Une boucle dans la boucle précedente pour compter le nombre d'élément successifs ( la je triche un peu , je regarde dans les tests de la boucle si y a la continuité des éléments ( successivité ... )
    Donc j devient le nombre d'élément successifs.
    Et je place dans ma nouvelle liste , l'element du milieur , grace à la division.

    Par contre mon truc , n'est pas bug proof , c'est une conception à la volée pour te donner une idée ...

    Hope this help
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    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
    A mon avis, tu pourrais passer par un algo de copie avec un itérateur boost de type filter. Le seul hic c'est que tu dois pouvoir faire des aller/retour sur ton itérateur de base pour pouvoir 'aller voir' le(s) suivant(s) et déterminer le milieu.

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    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 290
    Billets dans le blog
    2
    Par défaut
    Pour ma part, j'opterais pour une solution en 3 étapes simples (sans boost car visiblement, il s'agit d'un exercice):

    0. trier le tableau initial (si ce n'est pas déjà fait) en utilisant, par exemple, la fonction sort() de l'en-tête <algorithm>.

    1. découper ton tableau de départ en sous-tableaux (en utilisant un vector<vector<int>>) d'éléments connexes. Dans l'exemple du PO, ça donnerait 6 sous-tableaux:
    1 2 3 4
    6 7
    9
    11
    14 15
    36 37 38 39 40

    2. Pour chaque sous-tableau, choisir un élément et l'ajouter dans un tableau résultat.

    Etant donné que cela ressemble fort à un exercice, je m'abstiendrai de fournir un code fonctionnel

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 95
    Par défaut
    Merci à tous pour vos réponses.

    Pour lever l'ambigüité, il ne s'agit pas d'un exercice, mais c'est un cas concret dans un de mes projets. J'avais sensiblement simplifier l'affaire pour mieux expliquer mon problème.

    Je vais essayer tout ca, merci encore

  6. #6
    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
    Citation Envoyé par 3DArchi Voir le message
    A mon avis, tu pourrais passer par un algo de copie avec un itérateur boost de type filter. Le seul hic c'est que tu dois pouvoir faire des aller/retour sur ton itérateur de base pour pouvoir 'aller voir' le(s) suivant(s) et déterminer le milieu.
    En fait, un filter iterator ne conviendra pas. Mais tu peux quand même regarder du côté de Boost.Iterator pour t'aider à construire ton itérateur spécifique.

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    L'adaptateur adjacent_filtered devrait très bien aller.
    C'est un peu fait pour en fait...

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

Discussions similaires

  1. [Batch] Supprimer des éléments dans un dossier
    Par Shmitabidf dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 08/11/2011, 21h31
  2. Réponses: 8
    Dernier message: 05/11/2008, 17h29
  3. Supprimer des éléments dans la feuille de propriétés
    Par Deciprog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 24/03/2008, 21h34
  4. Supprimer des éléments dans une TreeView ?
    Par souch dans le forum Composants VCL
    Réponses: 4
    Dernier message: 16/09/2005, 12h20
  5. Réponses: 2
    Dernier message: 12/01/2004, 13h56

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