[C++] liste liee --> HELP!!

liste liee --> HELP!! [C++] - Programmation

Marsh Posté le 26-12-2001 à 17:48:45    

Salut
 
y aurait il une bonne ame qui saurait m'expliquer comment faire une liste liee en c++
 
par exemple voici une classe :
 
class xyz
{
     private : ...
     public : ...
}
 
et je voudrais que tout mes objets instanciant la classe xyz soit dans une liste liée (comme en c quoi) ou alors dans un vecteur dynamique
 
ca fait 1 semaine que je cherche et je trouve toujours pas :(
 
merci

Reply

Marsh Posté le 26-12-2001 à 17:48:45   

Reply

Marsh Posté le 26-12-2001 à 18:22:15    

#include <list> :D
 
De l'intérêt de la STL... :sweat:

 

[edtdd]--Message édité par tgrx--[/edtdd]

Reply

Marsh Posté le 26-12-2001 à 18:33:51    

merci mais ca m'avance pas beaucoup ca, quelques explications seraient les bienvenues...

Reply

Marsh Posté le 26-12-2001 à 19:45:32    

Je peux te répondre pour le vecteur dynamique (pas la doc pour le reste sous les yeux :) )
 
#include <vector>
 
using namespace std
 
typedef vector<xyz> XYZVector;
typedef XYZVector::iterator XYZIt;
 
alors ces quelques lignes de codes instencient le template vector pour qu'il utilise ta classe xyz, le vector est tout simplement un tableau d'objets dont la taille est modifiée de façon dynamique est optimale (enfin ça ça dépend de l'implémentation de la STL :) )
 
tu accédes aux éléments dans la tableau grâce à un iterator, par exemple:
 
xyz       o1,o2,o3;
XYZVector vecteur;
XYZIt     i;
 
vecteur.push_back(o1);
vecteur.push_back(o2);
vecteur.push_back(o3);
 
i=vecteur.begin();
i->methodexyz();
 
pour plus de détails cherche toi une doc sur la STL

 

[edtdd]--Message édité par LetoII--[/edtdd]

Reply

Marsh Posté le 27-12-2001 à 09:58:23    

merci pour ta reponse qui est beaucoup plus explicite, je crois que je devrai m'en sortir avec ca :)

Reply

Marsh Posté le 27-12-2001 à 12:12:07    

salut,
 
finalement j'ai decide de prendre une liste liée, c'est +/- pareil que le vecteur pour les instructions donc j'ai su m'y retrouver, mais par contre visual c++ me donne que je ne sais pas corriger, pouvez vous m'aider svp ?
 
merci
 
voici mon main :  
 
using namespace std;
 
typedef list<appareil> AppareilList;
typedef AppareilList::iterator AppareilIt;
 
void main(void)
{
 appareil a(1,"Appareil","Blablabla" ),b(2,"Appa2","test" ),c(3,"App3","test3" ),d;
 AppareilList list;
 AppareilIt i;
 ostream_iterator<appareil> sortie(cout, " " );
 
 list.push_front(a);
 list.push_front(b);
 list.push_front(c);
 
 copy(list.begin(),list.end(),sortie);
}
 
et en fait vc++ me donne une erreur pour la ligne ostream_iterator<appareil> sortie(cout, " " );
 
error C2664: '__thiscall std::ostream_iterator<class appareil,char,struct std::char_traits<char> >::std::ostream_iterator<class appareil,char,struct std::char_traits<char> >(class st
d::basic_ostream<char,struct std::char_traits<char> > &,const char *)' : cannot convert parameter 1 from 'class ostream_withassign' to 'class std::basic_ostream<char,struct std::char_traits<char> > &'
        A reference that is not to 'const' cannot be bound to a non-lvalue

Reply

Marsh Posté le 27-12-2001 à 12:46:25    

en fait, je veux juste affiche ma liste, comment faire ?

Reply

Marsh Posté le 27-12-2001 à 13:47:17    

Code :
  1. list<appareil>::iterator i;
  2. for (i=maliste.begin(); i != malist.end(); ++i) {
  3.     cout << *i << endl;
  4. };


ca marche pas ca?
de plus ta liste tu gagnerais a la transformer
en vector. C'est transparent au niveau
du code mais tu y gagnes au niveau performance
si tu te contentes d'ajouter des elements
a la fin.

Code :
  1. using namespace std;
  2. typedef vector<appareil> AppareilList;
  3. typedef AppareilList::iterator AppareilIt;
  4. int main(void) {
  5.   appareil a(1,"Appareil","Blablabla" ),b(2,"Appa2","test" ),c(3,"App3","test3" ),d;
  6.   AppareilList maliste;
  7.   AppareilIt i;
  8.   maliste.push_back(c);
  9.   maliste.push_back(b);
  10.   maliste.push_back(a);
  11.   for (i=maliste.begin(); i != maliste.end(); ++i) {
  12.     cout << *i << endl;
  13.   };
  14.   return 0;
  15. }


 
il faut egalement eviter d'appeler ta liste
list qui est un nom deja utilise.
et main retourne toujours une valeur (entiere).
 
pour que ca marche il faut evidemment avoir
defini l'operateur << sur un objet de type appareil.
 
LEGREG

Reply

Marsh Posté le 27-12-2001 à 16:58:59    

ok merci bcp
 
je vais quand meme faire ca avec une liste car je vais devoir supprimer ou ajouter un peu partout et pas seulement a la fin, et trier aussi, donc je pense qu'une liste est meilleur qu'un vecteur
 
a+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed