Les List en C++

Castial Messages postés 73 Statut Membre -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,

Voila mon problème.
J'apprends à utiliser les conteneurs list en C++, et pour cela j'ai codé un petit bout de programme sous Linux ( qui fonctionnait très bien ). Problème, chez moi, j'ai Seven, et quand je veux reprendre le TP, je me retrouve avec un plantage du programme à l'affichage de ma list.*
D'où pourrait provenir le problème à votre avis ?

Merci d'avance !!!

Voici mon code source :

#include <stdio.h>
#include <string.h>
#include <list>
#include <iostream>
using namespace std;

int main()
{
string trolol, biglol, masterlol;
list <string> listeTest;
list <string>::iterator IterateurListe;

cout << " ajout des elements : " << endl;
cin >> trolol; cin >> biglol; cin >> masterlol;
listeTest.push_back(trolol);
listeTest.push_back(biglol);
listeTest.push_back(masterlol);
cout << " Les elements on t il bien ete ajoutes ? " << endl;
advance (IterateurListe,1);
listeTest.erase(IterateurListe);
for (IterateurListe = listeTest.begin();IterateurListe!=listeTest.end();IterateurListe++)
{
cout << *IterateurListe << endl;
}
return 0;
}



4 réponses

  1. Utilisateur anonyme
     
    Recompile pour que ça fonctionne sous Windows.
    0
    1. Castial Messages postés 73 Statut Membre 5
       
      J'ai déjà recompilé, je vais publier mon code ça sera mieux
      0
  2. Castial Messages postés 73 Statut Membre 5
     
    Ah c'est bon en fait, c'est mon erase qui était mauvais, va savoir pourquoi ?
    Je vais tenter de refaire ça sous Seven,

    Merci quand même au gens qui on pris la peine de lire mon post et de commencer à chercher.
    0
  3. KX Messages postés 19031 Statut Modérateur 3 020
     
    Chez moi j'ai ces erreurs à la compilation :
    error C2679: '>>' binaire : aucun opérateur trouvé qui accepte un opérande de partie droite de type 'std::string'
    error C2679: '<<' binaire : aucun opérateur trouvé qui accepte un opérande de partie droite de type 'std::basic_string<_Elem,_Traits,_Ax>'


    Remarque :
    Quand tu utilises advance (IterateurListe,1), IterateurListe n'est pas initialisé !
    Il est préferable d'utiliser les const_iterator autant que tu peux.
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Note: mes erreurs de compilations viennent que tu as inclus <string.h> (C) au lieu de <string> (C++)
      Mais ton erreur est que tu dois initialiser IterateurListe avant de faire advance ou erase !
      0
  4. Castial Messages postés 73 Statut Membre 5
     
    Mhhh je vois ce n'est pas bête.

    Mais je ne vois pas comment utiliser le const_iterator.

    -> list <string>::const_iterator IterateurListe;

    Je l'ai remplacé dans ma déclaration et le compilo gueule.

    Mhh je vais essayer de voir la syntaxe.

    Merci en tout cas ;)
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Voici une version de ton code qui fonctionne chez moi :

      #include <iostream>
      #include <string> // ne pas confondre avec "string.h"
      #include <list>
      
      int main()
      {
      	std::string trolol, biglol, masterlol;
      	std::list<std::string> listeTest;
      
      	std::cout << "Ajout des elements :" << std::endl;
      
      	std::cin >> trolol;
      	listeTest.push_back(trolol);
      
      	std::cin >> biglol;
      	listeTest.push_back(biglol);
      
      	std::cin >> masterlol;
      	listeTest.push_back(masterlol);
      
      	std::list<std::string>::const_iterator
      		IterateurListe = listeTest.begin(); // initialisation indispensable
      
      	std::advance(IterateurListe,1);
      	listeTest.erase(IterateurListe);
      
      	std::cout << std::endl;
      
      	for(IterateurListe = listeTest.begin();
      		IterateurListe!= listeTest.end();
      		IterateurListe++)
      		std::cout << *IterateurListe << std::endl;
      
      	return 0;
      }
      0