Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1484 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  std :: list<float> :: iterator iy = c.coordx.beging()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

std :: list<float> :: iterator iy = c.coordx.beging()

n°447717
weed
Posté le 03-07-2003 à 16:19:03  profilanswer
 

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    
 

Code :
  1. std :: list<float> :: iterator il,iy;
  2. for (il=coordx.begin();il!=coordx.end();)
  3. {
  4.    cout << "yop";
  5.    il=il+4;
  6. }


voilou pour l'instant j'ai trouvé que ca comme parade ms je trouve pas ca tres propre
 

Code :
  1. std :: list<float> :: iterator il,iy;
  2.    for (il=coordx.begin();il!=coordx.end();)
  3.    {
  4.         cout << "yop";
  5.         il++;
  6.         il++;
  7.         il++;
  8.         il++;
  9.    }


je pourrais meme je pense faire ca ms c tjrs pas tres beau  
 

Code :
  1. std :: list<float> :: iterator il,iy;
  2.    for (il=coordx.begin();il!=coordx.end();il++,il++,il++,il++)
  3.    {
  4.         cout << "yop";
  5.    }


Message édité par weed le 03-07-2003 à 16:45:04
mood
Publicité
Posté le 03-07-2003 à 16:19:03  profilanswer
 

n°447723
MorFinBaZ
Posté le 03-07-2003 à 16:23:00  profilanswer
 

Tu peux surcharger l'opérateur += en y mettant n itération
 
Apres tu pourrais utiliser il+=4;

n°447734
weed
Posté le 03-07-2003 à 16:28:28  profilanswer
 

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

n°447743
weed
Posté le 03-07-2003 à 16:35:05  profilanswer
 

je viens de penser a ca  
comment puis affecter un iterateur avec un objet externe  
 

Code :
  1. iy = c.coordx.beging()


 
 

Code :
  1. bool baton :: operator== (const baton &c)
  2. {
  3. std :: list<float> :: iterator il,iy;
  4.    for (il=c.coordx.begin();il!=coordx.end();)
  5.    {
  6.         il++; il++; il++;  il++;
  7.    }
  8. }


n°447749
MorFinBaZ
Posté le 03-07-2003 à 16:38:19  profilanswer
 

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 :
  1. classe::operator+= (int n)
  2. {
  3.   for ( int i=1; i<=n ; i++ ) *this++;
  4. }


Bon je suis pas certain que ce que j'ai ecrit soit exacte, mais c'est l'idée dont il est question

n°447759
weed
Posté le 03-07-2003 à 16:44:18  profilanswer
 

oki  
 
 
as tu une idée pour affecter ma liste coordx de l'objet c ds il qui est un ierateur  
 

n°447806
Taz
bisounours-codeur
Posté le 03-07-2003 à 17:04:05  profilanswer
 

:non:  
1) pour les iterateurs, toujours utiliser ++it  
2) solution simple advance http://www.sgi.com/tech/stl/advance.html

n°447823
Willyzekid
Posté le 03-07-2003 à 17:10:35  profilanswer
 

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.


---------------
Horizon pas Net, reste à la buvette!!
n°447826
Willyzekid
Posté le 03-07-2003 à 17:12:08  profilanswer
 


 
Superbe :love:


---------------
Horizon pas Net, reste à la buvette!!
n°447839
Taz
bisounours-codeur
Posté le 03-07-2003 à 17:16:52  profilanswer
 

ne jamais dire/penser 'y a pas dans STL'  ;)

mood
Publicité
Posté le 03-07-2003 à 17:16:52  profilanswer
 

n°447843
weed
Posté le 03-07-2003 à 17:17:33  profilanswer
 

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 :
  1. class baton
  2. {
  3. private :
  4.       char orientation;
  5.       //std :: list<baton>  coord;
  6.    protected :
  7.     float pas;
  8.       float x, y;
  9.       list<float>  coordx, coordy;
  10.    .......
  11.    ......
  12. }


 
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 :
  1. il = c.coord.begin();


ms ca fonctionne pas et je vois trop comment faire  
 
bool baton :: operator== (const baton &c)
{
 std :: list<float> :: iterator il,iy;
}


Message édité par weed le 03-07-2003 à 17:19:35
n°447855
Taz
bisounours-codeur
Posté le 03-07-2003 à 17:23:08  profilanswer
 

this et c/other/rhs sont const, il faut donc utiliser des const_iterator des deux cotés.

n°447892
weed
Posté le 03-07-2003 à 17:39:50  profilanswer
 

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 :
  1. baton tmp(c);


 
et dc comme ca je pourrais manipulé tmp qui est une copie de c san rien modifié à c...

n°447997
Taz
bisounours-codeur
Posté le 03-07-2003 à 19:15:54  profilanswer
 

laisse tout en const et utilise des const_iterator et pas des const iterator

n°448289
Konar
Posté le 04-07-2003 à 01:31:01  profilanswer
 

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...

n°448290
weed
Posté le 04-07-2003 à 01:40:21  profilanswer
 

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 :
  1. vector <int> toto;
  2. toto[random(toto.size()];

n°448291
konar_spre​me
Posté le 04-07-2003 à 01:45:04  profilanswer
 

weed a écrit :

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 :
  1. vector <int> toto;
  2. toto[random(toto.size()];




 
random n'est pas une fonction qui existe.
Manque une parenthese.
Le môsieur te demande pour des map<> pas des vectors.

n°448292
Konar
Posté le 04-07-2003 à 01:46:06  profilanswer
 

konar_spreme a écrit :


 
random n'est pas une fonction qui existe.
Manque une parenthese.
Le môsieur te demande pour des map<> pas des vectors.


 
et aussi un iterator, pas un accès unique débile.

n°448295
Taz
bisounours-codeur
Posté le 04-07-2003 à 01:50:05  profilanswer
 

ce qui est loin d'etre aléatoire surtout avec une telle utilisation
 
 

Code :
  1. (unsigned)((double)std::rand()/((double)RAND_MAX+1)*N);


 
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


Message édité par Taz le 04-07-2003 à 01:51:45
n°448296
weed
Posté le 04-07-2003 à 01:52:13  profilanswer
 

oki je pensais pas que c'etait null le random

n°448297
Konar
Posté le 04-07-2003 à 01:57:19  profilanswer
 

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...

n°448298
Taz
bisounours-codeur
Posté le 04-07-2003 à 01:57:40  profilanswer
 

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

n°448300
Taz
bisounours-codeur
Posté le 04-07-2003 à 01:59:48  profilanswer
 

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.
 
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...

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é


Message édité par Taz le 04-07-2003 à 02:00:39
n°448301
Konar
Posté le 04-07-2003 à 02:05:47  profilanswer
 

++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.

n°448302
Taz
bisounours-codeur
Posté le 04-07-2003 à 02:08:20  profilanswer
 

franchement jetez un oeil à boost, les periodicités des générateurs sont impressionnantes

n°448303
Konar
Posté le 04-07-2003 à 02:12:11  profilanswer
 

++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...

n°448304
Taz
bisounours-codeur
Posté le 04-07-2003 à 02:16:04  profilanswer
 

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 :ouch: .


Message édité par Taz le 04-07-2003 à 02:20:31
n°448306
Konar
Posté le 04-07-2003 à 02:26:24  profilanswer
 

++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.

n°448307
Taz
bisounours-codeur
Posté le 04-07-2003 à 02:29:56  profilanswer
 

euh l'acces aléatoire dans la liste oui, mais à quel prix  :ouch:

n°448310
Konar
Posté le 04-07-2003 à 02:39:01  profilanswer
 

++Taz a écrit :

euh l'acces aléatoire dans la liste oui, mais à quel prix  :ouch:  


 
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...)

n°448314
Taz
bisounours-codeur
Posté le 04-07-2003 à 02:47:25  profilanswer
 

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

n°448317
Konar
Posté le 04-07-2003 à 02:53:57  profilanswer
 

++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' ?


Message édité par Konar le 04-07-2003 à 02:56:46
n°448320
Taz
bisounours-codeur
Posté le 04-07-2003 à 02:57:31  profilanswer
 

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

n°448323
Konar
Posté le 04-07-2003 à 03:04:10  profilanswer
 

++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+

n°448331
Taz
bisounours-codeur
Posté le 04-07-2003 à 03:26:24  profilanswer
 

Code :
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <iterator>
  4. #include <vector>
  5. #include <map>
  6. #include <ext/functional> // pour select1st
  7. using namespace std;
  8. using namespace __gnu_cxx; // pour select1st
  9. int main()
  10. {
  11.   map<string, unsigned> months;
  12.  
  13.   months["january"] = 31;
  14.   months["february"] = 28;
  15.   months["march"] = 31;
  16.   months["april"] = 30;
  17.   months["may"] = 31;
  18.   months["june"] = 30;
  19.   months["july"] = 31;
  20.   months["august"] = 31;
  21.   months["september"] = 30;
  22.   months["october"] = 31;
  23.   months["november"] = 30;
  24.   months["december"] = 31;
  25.   vector<string> keys;
  26.   transform(months.begin(), months.end(), back_inserter(keys),
  27.     select1st< map<string, unsigned>::value_type >());
  28.   random_shuffle(keys.begin(), keys.end());
  29.   copy(keys.begin(), keys.end(), ostream_iterator<string>(cout, ", " ));
  30.   // et apres tu pioches
  31.   // tu itereres le vecteur et à chaque fois
  32.   // months[*it] pour recuperer
  33.    
  34. }

n°448338
MorFinBaZ
Posté le 04-07-2003 à 08:17:04  profilanswer
 

Konar a écrit :


 
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.

Sous *nix il y a /dev/random qui est pas mal du tout, et tres simple d'utilisation =)

n°448381
Taz
bisounours-codeur
Posté le 04-07-2003 à 09:45:42  profilanswer
 

plutot urandom pour eviter l'appel bloquant...

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  std :: list<float> :: iterator iy = c.coordx.beging()

 

Sujets relatifs
Problème avec list<int>destructeur de list ????
float* *array ça donne quoi ça??float, innerHTML et Mozilla
[C#] convertir une chaîne String en Float[C ANSI] conversion chaine de caractere <=> float ou double
[STL] list, push_back et ses joyeux amis... Je comprends pas tout[C] conversion d'un double vers un float[REGLE]
[php]les float !!Comment fait ton pour avoir un float négatif???
Plus de sujets relatifs à : std :: list<float> :: iterator iy = c.coordx.beging()


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR