Les List en C++

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. Recompile pour que ça fonctionne sous Windows.
    0
    1. J'ai déjà recompilé, je vais publier mon code ça sera mieux
      0
  2. 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
    1. Modérateur
      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. Modérateur
        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
    2. 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. Modérateur
        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