find_if (c.begin();c.end(); prédicat) - C++ - Programmation
Marsh Posté le 21-06-2003 à 08:28:03
1. tu peux pas déclarer une fonction dans une autre
2. find_if retourne un itérateur sur la position (ou end() si y a rien)
tu peux utiliser les functor existant:
Code :
|
Marsh Posté le 21-06-2003 à 12:00:21
c'est là qu'on se rend compte que le C++ n'a rien a voir avec le C
Marsh Posté le 21-06-2003 à 19:59:36
polo021 a écrit : c'est là qu'on se rend compte que le C++ n'a rien a voir avec le C |
oui c génial la stl ou le c++ ms encore faut il le maitriser
en fait il faudrait mes coordonées x soit comprise entre 0.02 et 0.80, j'ai créé 2 iterateurs ms c'est pas bien propre ...
Code :
|
ca fonctionne tres tres bien, mais j'aimerais savoir s'il n'y avait pas une autre possibilités ...
j'ai vu sur un site que l'on pouvait utiliser greater_than_, less_than_. j'ai essayé mais cela fonctionne pas .... Je pensais utiliser cette methode et faire un et logique ...
Cela fonctionne tres bien dc c pas bien grave s'il n'y a pas trop de solution ....
sinon l'équivalent d'un delete d'un char *, c'est bien un
coordx.erase(coordx.begin(),coordx.end() )
qu'il faut faire dans le destructeur pour liberer la memoire, parce ce que je sens qu'il va falloir que j'en fasse car j'ai été souvent obligé de fermer la session() pour vider ma RAM
Marsh Posté le 21-06-2003 à 20:03:56
ca n'a rien a voir, mais evite de passer des list par valeurs. tu te retapes une copie à chaque fois sinon.
Marsh Posté le 21-06-2003 à 20:21:10
zut quel erreur de débutant il fallait que je fasse un ou
Code :
|
j'ai choisi la list car j'ai pas mal de push_back à faire ....
je ne comprends pas ta remarque, de toute facon avec un find ou tout autre algo de recherche je suis obligé de parcourir le "tableau" en entier ... non ???
Marsh Posté le 21-06-2003 à 20:23:47
c'est pas le choix de list que je critique, c'est le passage par valeur.
bool verif_position(list<float> lx, list<float> ly) à chaque appel les deux listes que tu passes sont copiées.
bool verif_position(const list<float>& lx, const list<float>& ly) tu passes par référence constante, pas de copie.
Marsh Posté le 21-06-2003 à 20:35:28
oui en effet j'avais pas pensé a ca ....
il faut que j'essaie d'oublier le passage par copie. En effet les listes sont copiés dans un espace mémoire pour etre utilisé dans la fonction ... Du coup une liste de 50 float, ca fait beaucoup.
Alors que le passage par pointeur/référence on transmet l'adresse du premier élément, bon lol il faut pas trop que je m'avance la-dessus, apres je risque me tromper
Marsh Posté le 21-06-2003 à 20:49:49
arf zut je peux pas utiliser de const ...
si je le mets j'ai ca comme erreur
Citation : Error: carre.cpp(107,11):Cannot convert 'std::list<float>::const_iterator' to 'std::list<float>::iterator' |
visiblement il faut que j'utilise un iterateur const donc je fais ca :
Code :
|
mais apres j'ai ce message d'erreur
Citation : Error: carre.cpp(107,11):Cannot modify a const object |
je ne peux pas utilisé de const pour l'itérateur et donc ds les parametres ....
l'idéal serait essayer de mettre les list en lecture, ms la visiblement c pas possible ....
pas grave je ferais attentions a ne pas modifier mes list accidentellement
EDIT : dc j'utilise :
Code :
|
Marsh Posté le 21-06-2003 à 21:16:59
Code :
|
Marsh Posté le 22-06-2003 à 00:49:11
mouaip ... j'y connais po grand chose en C++ et stl, mais tant qu'à faire t'aurais pu utiliser une list de vector plutot que lx et ly; c quand meme plus portable d'avoir une dimension variable;
et pis le 0.02 et 0.80 direct dans le corps de la fonction : bouh c po beau du tout !
rq: sinon pour faire des trucs aussi simples, le c c'est pas mal
Marsh Posté le 22-06-2003 à 00:59:01
bahh mes constante sont ds mon fichier main.cpp malheuresement en global a cause de l'opengl
j'ai essayé de faire un
Code :
|
ms sans succes les variables sont inconnu ds mon fichiers ou j'ai mis mes fonctions menbres .....
si j'ai le temps j'essairais de lire un fichier comme ca l'utilisateur pour meme choisir.
Citation : mais tant qu'à faire t'aurais pu utiliser une list de vector |
euhh je te suis pas, j'y connais pas trop en STL, tu veux parler du conteneur vector ?
Marsh Posté le 22-06-2003 à 04:24:31
Citation : bahh mes constante sont ds mon fichier main.cpp malheuresement en global a cause de l'opengl |
Je ne vois pas trop le rapport avec OpenGL.
A moins qu'il y ait une ellipse dans ton discours que je n'ai pas vu .
Citation : j'ai essayé de faire un
|
il ne suffit pas de mettre extern dans la translation unit qui "contiendra" les variables globales
encore faut-il aussi faire une declaration prealable
dans les translation unit qui les utiliseront.
(un petit bouquin de C ne serait pas de trop ?)
dans monfich.cpp (la declaration extern est optionnelle):
Code :
|
dans monbidule.cpp :
Code :
|
C'est la qu'est le trick: tu n'as le droit d'affecter une valeur a variable globale que dans une seule translation unit (c'est logique) meme si c'est la meme valeur (c'est moins logique). Et á chaque fois que tu ecriras extern nom_de_variable; c'est a cette variable déclarée dans le premier fichier que tu feras reference.
Ensuite ce sera a l'edition des liens qu'on rabibochera les differents morceaux et les symboles.
Apres tu apprendras a utiliser les namespaces,
les membres de classe statiques, les accesseurs etc...
LeGreg
Marsh Posté le 22-06-2003 à 09:01:17
un accesseur (writer ou reader en anglais je crois) sont des fonctions menbres permettant d'acceder au variable private ou protected dans la meme classe.
un namespaces est espace de nom regroupant un ensemble de class. Ansi je pourrai utiliser ma classe toto :: <list> float i; sans creer de conflit avec la STL.
les membres de classe statiques, variable statique défini pour toutes les classes ou pas ?
je vois donc pas trop le rapport entre ce que tu me racontes que j'apprendrai tel truc avec mon problème. Je veux bien ms il faut que l'on m'explique.
Pourquoi je parle de opengl. Et bien pour ta gourverne, si tu n'as jamais utilisé cette biblio, il faut que je mette toutes mes fonctions menbres d'affichage (exemple : cadre.affiche(); ) dans ma fonction display ();
la fonction display () est appellé par glutDisplayFunc(display)(void);
Pourquoi suis je obligé de me mettre en global ?
==> global
Code :
|
cf http://forum.hardware.fr/forum2.ph [...] 86#t435486
Marsh Posté le 22-06-2003 à 09:11:03
a oui je me souviens now un peu ...
y a les declarations et les ....... (arf le mot m'echappe)
Marsh Posté le 22-06-2003 à 09:14:42
weed a écrit : un accesseur (writer ou reader en anglais je crois) sont des fonctions menbres permettant d'acceder au variable private ou protected dans la meme classe. |
Et bien c'est bien, donc tu as les bases mais tu dois encore apprendre a quoi ca sert.
Le namespace t'evites lorsque tu as des noms definis au niveau global qu'ils collisionnent avec des noms d'autres librairies.
En general les developpeurs aiment bien utiliser des noms simples comme foo ou toto, et si tu essaies de lier deux modules qui ont un nom en commun tu es *biaisé*.
De plus si tu es paranoiaque et que tu as un nom de variable que tu ne veux pas pouvoir utiliser en dehors de ton module, tu peux le declarer dans un namespace anonyme.
Une maniere propre d'avoir des globales c'est de les mettre comme membre statiques d'une classe et de les acceder uniquement par des accesseurs plutot que directement en tapant leur adresse. (par exemple)
LeGreg
Marsh Posté le 24-06-2003 à 00:44:28
toujours ds le cas d'une recherche, 'y a til pas un algo de recherche pour trouver une suite de 4 nombres
par exemple ds ma list A, j'ai :
2 5 6 2 8 9 4 5 3 1 45
et je souheterais trouver la suite 8 9 4 5
je fais une recherche ds la list A et si je la trouve je l'efface ds A : 2 5 6 2 3 1 45
je sens que ca va pas etre possible avec un truc tout fait et qu'il va falloir que je fasse une petite surcharge de == en parcourant la liste .... grhhhhh
Marsh Posté le 24-06-2003 à 02:23:15
8 9 4 5 saont ds une liste aussi 8 9 4 5 7 8 6 2
et je dois comprare par segments de 4 elements ....
c trop de la balle
j'ai trouvé
Code :
|
sur http://www.sgi.com/tech/stl/List.html
ce que je fais tout simplement je creer alors
je copie une sequence de 4 eleme,nt avec la fonction copy
dans une liste dont j'aurais definis la taille à 4 pour optimiser et j'utilise cette nouvelle liste pour faire la comparaison avec la surcharge ==
Marsh Posté le 21-06-2003 à 03:22:53
Bonjour,
voilou j'aimerais savoir si dans ma liste de float, j'ai un nb plus petit que 0.02
je pensais faire ca
si je fais ca j'ai une erreur de déclaration
et si je met la fonction sup en dehors de ma fonction menbre tout en restant dans le meme fichier que ma fonction menbre, et bien j'ai une Illégal structure comme message d'erreur...
a moins de parcourir ma liste avec un iterateur, n'y a t'il pas un algo que je puisse utiliser pour que ce soit un peu plus propre...
Message édité par weed le 21-06-2003 à 03:23:17