std :: list<float> :: iterator iy = c.coordx.beging() - C++ - Programmation
Marsh Posté le 03-07-2003 à 16:23:00
Tu peux surcharger l'opérateur += en y mettant n itération
Apres tu pourrais utiliser il+=4;
Marsh Posté le 03-07-2003 à 16:28:28
euhh comprends pas il faut surcharger iterateur.
et pq j'ai pas besoin de sucharger l'iterateur ++, c'est deja fait .......
arf bon je sens que je vais fais 4 fois il++ car j'ai la fleme de le faire
Marsh Posté le 03-07-2003 à 16:35:05
je viens de penser a ca
comment puis affecter un iterateur avec un objet externe
Code :
|
Code :
|
Marsh Posté le 03-07-2003 à 16:38:19
Bon je recommence.
Ce que tu peux faire, pour te faciliter la vie, c'est de surcharger un operateur (ou de creer une fonctions globale... enfin bref comme tu veux) comme ca grosso modo :
Code :
|
Bon je suis pas certain que ce que j'ai ecrit soit exacte, mais c'est l'idée dont il est question
Marsh Posté le 03-07-2003 à 16:44:18
oki
as tu une idée pour affecter ma liste coordx de l'objet c ds il qui est un ierateur
Marsh Posté le 03-07-2003 à 17:04:05
1) pour les iterateurs, toujours utiliser ++it
2) solution simple advance http://www.sgi.com/tech/stl/advance.html
Marsh Posté le 03-07-2003 à 17:10:35
Une liste n'est pas "random access" donc c'est normal que ca te renvoit un iterator bi-directionnel seulement et non "random access" (comme le fait un vector ou un deque).
Donc avec une list tu n'as jamais la possibilité d'utiliser +=, -=, +, etc.
A mon avis, si ton utilisation n'est pas isolée, tu ferais bien de considerer les vecteurs à la place des lists parce que l'utilisation que tu fais là, c'est celle d'un vecteur.
Marsh Posté le 03-07-2003 à 17:12:08
++Taz a écrit : |
Superbe
Marsh Posté le 03-07-2003 à 17:17:33
merci pour la fonction advance, taz
ms j'ai tjrs le pb avec ma sucharge
bool operator== (const baton & );
ds ma classe baton j'ai en autre coordx, coordy;
Code :
|
j'aimerais dc faire dc acceder coordx et coordy de l'objet c de type baton qui est passé en parametre ...
comment je fais pour affecter un iterateur l'adresse du premier element de ma liste coordx ?
Code :
|
ms ca fonctionne pas et je vois trop comment faire
bool baton :: operator== (const baton &c)
{
std :: list<float> :: iterator il,iy;
}
Marsh Posté le 03-07-2003 à 17:23:08
this et c/other/rhs sont const, il faut donc utiliser des const_iterator des deux cotés.
Marsh Posté le 03-07-2003 à 17:39:50
grhhhhhh j'ai déja fait l'erreur en plus
logique en regardant les parametres ....
oui ms ce que tu dis ce de me mettre en const ms apres je ne peux plus faire varier les iterator ds mon for ...
ce que je vais faire retirer tout les const et je vais declarer un objet ds mon fonction qui prendra comme valeur l'objet c
Code :
|
et dc comme ca je pourrais manipulé tmp qui est une copie de c san rien modifié à c...
Marsh Posté le 03-07-2003 à 19:15:54
laisse tout en const et utilise des const_iterator et pas des const iterator
Marsh Posté le 04-07-2003 à 01:31:01
ca a rien a voir, mais ca me serait utile : personne connait un genre de randomized_iterator pour des map, où on accèderait aux éléments parfaitement au hasard, par exemple avec un :
for (i = mymap.begin(); i != mymap.end(); i++)
où on parcourerait tous les éléments de la map dans un ordre 'suffisamment' hasardeux.
chuis ouvert à toutes les solutions, meme batardes, mais le plus rapide possible...
Marsh Posté le 04-07-2003 à 01:40:21
arf je connais pas bien map
ms ce que j'ai fais c'est avec les vector que j'ai utilisé avec les indices et j'ai fait un genre de
Code :
|
Marsh Posté le 04-07-2003 à 01:45:04
weed a écrit : arf je connais pas bien map
|
random n'est pas une fonction qui existe.
Manque une parenthese.
Le môsieur te demande pour des map<> pas des vectors.
Marsh Posté le 04-07-2003 à 01:46:06
konar_spreme a écrit : |
et aussi un iterator, pas un accès unique débile.
Marsh Posté le 04-07-2003 à 01:50:05
ce qui est loin d'etre aléatoire surtout avec une telle utilisation
Code :
|
est bien mieux
pour répondre à ta question
http://www.sgi.com/tech/stl/random_shuffle.html
sinon il y a l'extension de SGI qui marche bien
http://www.sgi.com/tech/stl/random_sample.html
http://www.sgi.com/tech/stl/random_sample_n.html
edit: evidemment on comprends bien qu'il faut des RandomAccessIterator pour tous ça
Marsh Posté le 04-07-2003 à 01:57:19
je connais le random_shuffle, mais a moins d'une ratance de ma part, j'ai pas réussi a l'utiliser avec des map (normal : map == élts triés), donc je copie tous les élts de ma map ds un vector puis je random_shuffle ce dernier puis je parse, mais : le random_shuffle est supra rapide mais la copie map -> vector prend trop de temps.
vais jeter un rapide coup d'oeil vers tes 2 autres liens.
par contre a mon avis c'est dommage qu'une implémentation d'un tel iterator random soit absente...
Marsh Posté le 04-07-2003 à 01:57:40
weed a écrit : oki je pensais pas que c'etait null le random |
ben c'est rand et pas random et utilisais comme tu le fais, c'est loin d'etre efficace. allez voir dans boost:: les générateurs de nombres pseudo-aléatoires sont légions et très bien foutus http://boost.org/libs/random/index.html
Marsh Posté le 04-07-2003 à 01:59:48
Konar a écrit : je connais le random_shuffle, mais a moins d'une ratance de ma part, j'ai pas réussi a l'utiliser avec des map (normal : map == élts triés), donc je copie tous les élts de ma map ds un vector puis je random_shuffle ce dernier puis je parse, mais : le random_shuffle est supra rapide mais la copie map -> vector prend trop de temps. |
mais pour avoir un random_iterator il faut qu'on puisse avoir un accès aléatoire!!!!! si tu veux faire ça avec une map, faut que tu maintiennes à coté dans un vector la liste des clefs et apres tu pioches dedans
eidt: et j'avais édité
Marsh Posté le 04-07-2003 à 02:05:47
++Taz a écrit : ben c'est rand et pas random et utilisais comme tu le fais, c'est loin d'etre efficace. allez voir dans boost:: les générateurs de nombres pseudo-aléatoires sont légions et très bien foutus http://boost.org/libs/random/index.html |
désolé pour la soluce win32-only, mais pour un nb presque parfaitement aléatoire, y a le QueryPerformanceCounter() ki retourne un nb 64 bits correspondant au nb de cycles cpu depuis le boot de l'os.
Marsh Posté le 04-07-2003 à 02:08:20
franchement jetez un oeil à boost, les periodicités des générateurs sont impressionnantes
Marsh Posté le 04-07-2003 à 02:12:11
++Taz a écrit : mais pour avoir un random_iterator il faut qu'on puisse avoir un accès aléatoire!!!!! si tu veux faire ça avec une map, faut que tu maintiennes à coté dans un vector la liste des clefs et apres tu pioches dedans |
c'est vrai que la, un accès random sur une map, après reflexion ca veut un peu rien dire, c'est pas très logique tout ca.
quoique... apparemment on m'a dit que l'implémentation d'une map ds certaines stl (celle de ms pour ne pas la citer) se faisaient avec un simple arbre n-aire, donc où un accès random veut dire qqchose.
vais aller dormir et mediter sur tout ca tiens...
Marsh Posté le 04-07-2003 à 02:16:04
non c'est pas possible d'avoir un acces aléatoire avec un arbre. ou alros tu peux simuler, mais ça sera tres tres mauvais au niveau de la répartition
edit: et puis niveau performance, c'est la mort... tu te tapes une descente d'arbre à chaque fois. je sais pas si t'imagines l'impact sur les performances .
Marsh Posté le 04-07-2003 à 02:26:24
++Taz a écrit : non c'est pas possible d'avoir un acces aléatoire avec un arbre. ou alros tu peux simuler, mais ça sera tres tres mauvais au niveau de la répartition |
2 sec ke je tentes de mettre le pseudo-neurone en état de marche...
me rappelle juste d'un cours ou on nous parlait de mettre un arbre sous forme de liste chainée (me rappelle plus, me semble peu possible d'ailleurs a 1ère vue), mais ou donc un accès aléatoire serait possible.
sinon c'est clair qu'un accès aléatoire ds un vrai arbre me semble ratant, mais me demande a quel dégré par rapport au reste.
Marsh Posté le 04-07-2003 à 02:29:56
euh l'acces aléatoire dans la liste oui, mais à quel prix
Marsh Posté le 04-07-2003 à 02:39:01
++Taz a écrit : euh l'acces aléatoire dans la liste oui, mais à quel prix |
bah en fait mon pb est que j'ai une map<string, class X>.
c'est une map, j'y peux rien, c'est comme ca.
apres faut que j'extrais au hasard les infos de la class X dans un ordre aléatoire, a hauteur d'un nombre N.
juska présent je copie en entier la map ds un vector puis je random_shuffle ce dernier et j'en extrais les N premiers.
cette solution est correcte, mais si map.size() > 10000, ca commence a prendre trop de temps cpu, et si map.size() > 100000, va falloir ke je dise au patron de changer son bi P3-800 ki va pas assez vite.
donc c'est a moi de trouver mieux (et c'est faisable, la solution présente fouette et je le sais bien...)
Marsh Posté le 04-07-2003 à 02:47:25
ben on y peut quoi si tu utilises un conteneur qui te satisfait pas... (déjà moi je te conseille de n'extraire que les clefs). vouloir les éléments dans un ordre et en attaper une poignée au pif sont deux choses pas très compatibles. donc non c'est pas possible. cela dit tu peux tenter une implémentation tabulaire avec make_heap et ce genre de chose et là tu peux piocher sans problème
Marsh Posté le 04-07-2003 à 02:53:57
++Taz a écrit : ben on y peut quoi si tu utilises un conteneur qui te satisfait pas... (déjà moi je te conseille de n'extraire que les clefs). vouloir les éléments dans un ordre et en attaper une poignée au pif sont deux choses pas très compatibles. donc non c'est pas possible. cela dit tu peux tenter une implémentation tabulaire avec make_heap et ce genre de chose et là tu peux piocher sans problème |
ben en fait c'est tout le pb : moi me fout de la clef, ca concerne le gars ki s'occupe des insertions/suppressions (d'ailleurs ca l'arrange bien ke ca soit des map). moi veux juste récuperer les infos au hasard : tester dans n'importequel ordre si ces infos correspondent a celles attendues, si oui les stocker et passer a la suivante juska atteindre N.
m'a l'air d'etre un pb insoluble... demain vais tenter de virer ces map inutiles et les remplacer par un truc mieux, genre un simple vector.
edit : me manque un niveau global sinon, c'est quoi ces 'make_heap' ?
Marsh Posté le 04-07-2003 à 02:57:31
mais je sais que tu t'en fout de la clef. cela dit pour piocher t'as pas besoin de tout extraire!!! tu n'extrais que les clefs, tu pioches et apres tu retrouves dans la map la donnée
Marsh Posté le 04-07-2003 à 03:04:10
++Taz a écrit : mais je sais que tu t'en fout de la clef. cela dit pour piocher t'as pas besoin de tout extraire!!! tu n'extrais que les clefs, tu pioches et apres tu retrouves dans la map la donnée |
la je te suis plus, soit j'ai le neurone qu'a décidé qu'il était temps de mourir, soit me manques un ou plusieurs niveaux en c++ comparé a toi.
dans les 2 cas (le 2ème me semble me semble plus approprié), je me réfugie dans mon lit et je te solliciterais surement demain.
a+
Marsh Posté le 04-07-2003 à 03:26:24
Code :
|
Marsh Posté le 04-07-2003 à 08:17:04
Konar a écrit : |
Sous *nix il y a /dev/random qui est pas mal du tout, et tres simple d'utilisation =)
Marsh Posté le 03-07-2003 à 16:19:03
j'arrive pas incrementer de 4 directement
pour tant un iterateur est comme un pointeur
donc logiquement je ca pourras fonctionner
j'ai essayer ds le for ou à l'exterieur rien à y faire toujours
"Illegal operation" comme erreur
bien sur si je
voilou pour l'instant j'ai trouvé que ca comme parade ms je trouve pas ca tres propre
je pourrais meme je pense faire ca ms c tjrs pas tres beau
Message édité par weed le 03-07-2003 à 16:45:04