Problème de compilation de programmes de tri avec portland - C++ - Programmation
Marsh Posté le 28-06-2005 à 17:56:07
oui, <functional>
Fais gaffe, trié les listes, c'est bof.
Marsh Posté le 28-06-2005 à 18:18:12
Merci Taz,
J'ai rajouté #include<functional>
A quoi sert-il au fait ?
J'ai ainsi réussi à faire disparaitre mes deux premiers messages mais le troisième demeure dès la compilation (too many...Compar()); ). Est ce que je suis encore passé à coté de qqch ?
Merci déja de cette aide !
Marsh Posté le 28-06-2005 à 18:37:17
C'est lapidaire !
Je me lance dans la reprogrammation d'un algorithme de tri ?
Marsh Posté le 28-06-2005 à 18:46:45
surtout pas. Dans ton cas, la solution est simple et c'est d'ailleurs utilisée par list<>::sort.
Code :
|
Marsh Posté le 28-06-2005 à 18:53:11
on peut même ruser plutôt que l'affectation finale.
Code :
|
Marsh Posté le 28-06-2005 à 18:53:45
Je plaisantais (je suis trop vieux pour m'attaquer à ça !) !
Merci de ta solution, je la teste dès demain.
En fait, c'est plutot l'implémentation de la stl par le compilateur portland qui apparaissait mitée. Je n'avais aucun de ces problèmes avec gcc.
Merci encore !
Marsh Posté le 28-06-2005 à 19:00:22
c'est bien ce que je dis, la stl de portland est incomplète.
Marsh Posté le 28-06-2005 à 19:06:24
et affine un peu la portée de tes variables, parce que là, c'est très bof.
En fait, même pas besoin de recopie du tout
Code :
|
c'est moins bon que la version de stl, mais c'est déjà bien
Marsh Posté le 28-06-2005 à 19:09:14
et t'as oublié <cstdlib> et <ctime> pour std::srand(std::time(0)); et std::rand()
Marsh Posté le 04-07-2005 à 15:23:32
Salut,
Bon, en fait, il semble que le problème demeure. J'ai maintenant la syntaxe suivante (désolé Taz, mais je n'ai pas encore rajouté les deux include nécessaire à l'initialisation et à la génération de nombres aléatoires) :
Code :
|
Avec ce programme (en espérant que c'est ainsi que tu le corrigeais Taz), la compilation et l'éxécution marche parfaitement avec g++ mais pas avec le compilateur Portland pgCC. Dans ce cas, dès la compilation, j'ai le message d'erreur suivant :
Code :
|
En fait, il semble que le création du vector initial pose problème. Est ce que ce problème peut se résoudre simplement ou est-il nécessaire de faire une copie dans une boucle de chaque élément de la liste list ?
D'autre part, Taz, est ce que cela ne pose pas de problème d'avoir appelé list une variable définie dans la fonction void list_sort ? Ne peut-il pas y avoir confusion ? Dans ce cas, est ce que le " std:: " peut seul servir à distinguer la variable " list " du conteneur " list " ?
Si c'est possible d'avoir ces quelques eclaircissement, d'avance merci !
Marsh Posté le 04-07-2005 à 16:50:25
je ne sais pas, c'est toi qui a rajouté le using. Vire le. Déplace le.
Sinon, utilise stc::copy dans l'autre sens pour mettre les éléments dans la liste temporaire. Mais n'écris rien à la main.
Marsh Posté le 05-07-2005 à 09:01:32
Bon, d'une part j'ai beau déplacé le using, ça ne marche pas mieux, en tout cas avec pgCC.
De plus, même avec g++, je ne trouve pas l'espace de nomage stc. La ligne "using namespace stc" que j'ai rajoutée n'est pas reconnue même avec ce compilateur.
D'autre part, je reviens sur ma question, est ce que l'utilisation d'une variable nommée "list" ne pose pas de problème dans ce genre de programmes ? Est-ce que toutes les précautions sont prises pour qu'il n'y ait pas de confusion avec le conteneur de la STL ?
Marsh Posté le 05-07-2005 à 09:39:31
C'est toujours lapidaire !
Tu as bien précisé d'utiliser stc::copy pour mettre les éléments dans la liste temporaire (cf ton message du 4/7/05), non ?
cordialement,
nathan
Marsh Posté le 05-07-2005 à 09:41:44
ben oui, j'ai précisé std:: quand j'utilise quelque chose de std. Après list, c'est un identifiant comme un autre.
Marsh Posté le 05-07-2005 à 09:49:01
Justement, tu avais plutot écrit " stc:: " que " std :: " , non ?
Si je comprends bien, tu a voulu dire d'utiliser std::copy (et non stc::copy !) pour faire un copiage dans l'autre sens des éléments de la liste ? Par rapport à ta première proposition, qu'est ce que cela change ? Ca ne résoud pas le problème, non ?
Tant mieux si, pour mon autre question, list est également valable comme nom d'argument !
Marsh Posté le 05-07-2005 à 10:23:01
c'est une coquille. ça ne change rien. ta stl est mitée.
list est valable comme tout ce que tu veux.
Marsh Posté le 05-07-2005 à 10:41:29
Ok pour la coquille !
Sinon le " mitage " de ma stl est propre à pgCC pas à g++ c'est ça ? Ce que tu veux dire c'est que la version utilisée par pgCC, à la différence de celle de g++, est trop ancienne ? ou buggée ?
Est ce que le chargement d'une version plus récente de la STL, sur des sites du type :
http://www.sgi.com/tech/stl/download.html
pourrrais me permettre de résoudre mon problème (ie. : utiliser des opérations de tri avec le compilateur portland, comme ce que me permet de faire g++ ?).
Dans ce cas, je pense que revenir au première écriture de mon programme pourrait également fonctionner, non ?
Marsh Posté le 05-07-2005 à 18:04:37
différente et incomplète.
si tu te trouves un STL qui fonctionne bien avec ton compilateur, oui, ton premier programme convient.
Je comprends pas en quoi mon exemple de solution pose problème
Marsh Posté le 06-07-2005 à 08:20:35
Si effectivement, la syntaxe que j'ai adoptée (cf. post du 4/7) correspond bien à ce que tu m'avais indiquée, je ne comprends pas très bien moi-même le message d'erreur.
Il est possible qu'il n'y ait pas de constructeur du conteneur de type "vector" sous la forme "vector(list.begin(),list.end())" tel que tu le proposes. Apparemment, c'est déja cette construction qui pose problème.
Marsh Posté le 06-07-2005 à 10:42:34
et bien alors comme je t'ai dit, remplace le constructeur de vector par un vector(list.size(), typename List::value_type()) + std::copy(list.begin(), list.end(), values.begin())
Marsh Posté le 06-07-2005 à 11:28:10
Ok, j'ai enfin compris ton std::copy !
Effectivement, après correction, le programme suivant fonctionne parfaitement avec mon compilateur portland pgCC (j'ai encore eu quelques soucis en essayant de rajouter les include <ctime> et <cstdlib> dont le compilateur pgCC ne semblaient pas vouloir - d'où leur absence ici - mais ce n'est pas mon problème dans ce travail) :
Code :
|
Encore merci de ton aide -et de ta patience !
Marsh Posté le 28-06-2005 à 17:49:47
Bonjour,
j'ai déja posé certaines questions relatifs aux opération de tri avec la STL. Ainsi, j'étais parvenu à l'écriture de programmes de ce type, qui se rapporchait le plus du cas que je souhaitais traiter :
Ainsi, on créait une liste de pointeur sur des objets de type Article, affecté d'un prix. Le tri se réalise ensuite sur les prix de ces objets.
Avec g++, ce programme compile et fonctionne. Mais, avec le compilateur portland pgCC, j'ai ce message d'erreur :
Sauriez vous d'où vient mon problème ? Est ce que j'ai oublié un fichier à mettre en include ou une librairie ?