Les List en C++

Castial Messages postés 66 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
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;
}




A voir également:

4 réponses

Utilisateur anonyme
 
Recompile pour que ça fonctionne sous Windows.
0
Castial Messages postés 66 Date d'inscription   Statut Membre Dernière intervention   5
 
J'ai déjà recompilé, je vais publier mon code ça sera mieux
0
Castial Messages postés 66 Date d'inscription   Statut Membre Dernière intervention   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
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   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
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   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
Castial Messages postés 66 Date d'inscription   Statut Membre Dernière intervention   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
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   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