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 :

supprimer valeurs dans vector


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 12
    Par défaut supprimer valeurs dans vector
    Bonjour, en executant mon code ci dessous, une erreur m'apparait :
    Expression: Vector suscrit out of range ( Le but etant de supprimer les nombres paires dans le second tableau, en utilisant vector et erase )
    Je ne comprend pas cette erreur, et solicite de l'aide merci


    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include <iostream>
    #include <conio.h>
    #include <vector>
     
    using namespace std;
     
    void main()
    {
    	const int nMax = 20;
    	vector<int> tab(20);
    	for (int a = 0; a < nMax; a++)
    	{
    		tab[a] = rand() % 101;
    	}
    	cout << "Voici le tableau de 20 entiers donne aleatoirement." << endl;
    	for (int a = 0; a < nMax; a++)
    	{
    		cout<<" | "<< tab[a];
    	}
    	cout << "\n\nVoici le tableau sans les nombres paires :" << endl;
    	for (int a = 0; a < nMax; a++)
    	{
    		if (tab[a]%2==0)
    		{
    			tab.erase(tab.begin());
    		}
    		else
    		{
    			cout << " | " << tab[a];
    		}
    	}
    	_getch();
    }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,

    tu parcours ton tableau sur 20 cases, et en chemin tu supprimes des cases.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 12
    Par défaut
    Je comprend, cependant quand je le diminue s'est automatiquement la derniere valeur qui est supprimée,
    pouvez vous m'indiquez comment faire?

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 494
    Par défaut
    Lisez la documentation.
    http://www.cplusplus.com/reference/vector/vector/erase/

    Ligne 25, vous êtes sûr d'avoir supprimé le bon élément ???

    Après être passé une fois en ligne 25, la taille du tableau est de 19.
    Pensez-vous qu'après cela les bornes de la boucle en ligne 21 sont pertinentes ?

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Billets dans le blog
    21
    Par défaut
    Le mieux c'est de prendre le réflexe d'utiliser la bibliothèque standard, en particulier les algorithmes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <algorithm>
    #include <vector>
     
    int main() {
     
      std::vector<int> v = { 0, 1, 2, 3, 4, 5 };
      v.erase( std::remove_if(v.begin(), v.end(), [](int x) { return x % 2 != 0; }) , v.end() );
     
    }
    std::remove_if(b, e, p) repousse tous les éléments qui satisfont à p au bout du conteneur et renvoie un itérateur qui pointe après le dernier élément pour lequel p est faux.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 12
    Par défaut
    Merci pour vos reponses,

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #include <iostream>
    #include <conio.h>
    #include <vector>
    #include <algorithm>
     
    using namespace std;
     
    void main()
    {
    	int nMax = 20;
    	vector<int> tab(nMax);
    	for (int a = 0; a < nMax; a++)
    	{
    		tab[a] = rand() % 101;
    	}
    	cout << "Voici le tableau de 20 entiers donne aleatoirement." << endl;
    	for (int a = 0; a < nMax; a++)
    	{
    		cout<<" | "<< tab[a];
    	}
    	cout << "\n\nVoici le tableau sans les nombres paires :" << endl;
    	for (int a = 0; a < nMax; a++)
    	{
    		tab.erase(remove_if(tab.begin(), tab.end(), [](int x){ return x % 2 == 0; }), tab.end());
    		nMax = nMax - 1;
    			cout << " | " << tab[a];
    	}
    	_getch();
    }
    Avec ce code, le but de l'exercice est réalisé, cependant j'ai un dernier probleme, ici ma derniere valeur aleatoire était 83, il devrait donc apparaitre
    à la fin, mais il n'y ai pas. Sinon pour les autres valeurs impairs ton astuce marche Merci

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

Discussions similaires

  1. [MySQL] Probleme Insert svp
    Par chanteur06 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 13/10/2014, 16h19
  2. Ou est le probleme ici svp
    Par narpu dans le forum Débuter
    Réponses: 3
    Dernier message: 26/04/2011, 11h45
  3. Probleme requete svp
    Par swiixz dans le forum Langage SQL
    Réponses: 5
    Dernier message: 21/06/2007, 19h43
  4. probleme Jinternalframe svp
    Par swiixz dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 30/05/2007, 18h38
  5. probleme projet svp
    Par ruspy dans le forum C++
    Réponses: 3
    Dernier message: 20/04/2006, 08h45

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