CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C++] standard STL

godrik
godrik
Niveau 30
27 décembre 2006 à 16:25:13

Bonjour à tous,
Je cherche actuellement des informations tres précise sur le fonctionnement de la STL selon la norme. Je suis donc a la recherche du plus d´information possible. Je sais que la norme est payante, mais peut etre un draft est disponible.
Quelqu´un aurait ca (ou autre chose qui m´aiderait) en stock ?
Merci

Fvirtman
Fvirtman
Niveau 10
27 décembre 2006 à 16:39:15

Je m´appuie sur la norme de SGI (meme si la norme ne contient pas les hash, les slist, et autres conteneurs)
A part cela, cette doc m´a permis d´etre portable Windows/Linux.

http://www.sgi.com/tech/stl/table_of_contents.html

godrik
godrik
Niveau 30
27 décembre 2006 à 17:17:58

J´ai l´impression que SGI respecte la norme (sauf quand il le dit) mais produit des extensions a cette norme.
Par exemple au sujet de l´algorithme for_each, SGI stipule:
"Applications are performed in forward order, i.e. from first to last"
Pourtant for_each prends en parametre un InputIterator et non un ForwardIterator. J´ai l´impression que ce comportement n´est pas imposé par la norme.
De plus, le livre "STL tutorial and Reference guide", par Musser et Saini, ne précise pas l´ordre d´application.

J´aurai du dire que je cherchais à ré-écrire une partie de la STL et non pas à l´utiliser. C´est pourquoi, je m´attache a ce style de détail.

Fvirtman
Fvirtman
Niveau 10
29 décembre 2006 à 15:14:00

par la vraie norme, je suis loin d´etre incollable.
par contre, j´ai appris les fonctionnements internes des STL, je connais les algos internes utilisés, si tu as besoin...

godrik
godrik
Niveau 30
29 décembre 2006 à 22:53:19

En fait, il y a un draft du standard C++ sur le site de B. Stroustrup:
ftp://https://www.jeuxvideo.com//ftp.research.att.com/pub/c++std/WP/CD2/
Exactement ce qu´il me fallait! :)

godrik
godrik
Niveau 30
01 mars 2007 à 16:57:48

Les informations suivante m´intéresseraient. pouvez vous répondre a ces quelques questions ?

dans les applications qui vous interesse quel algorithmes de la STL utilisez vous ?
De quelle taille sont les données manipulées (max et moyenne) ?
Combien de temps prennent vos opération élémentaires (max et moyenne) ?

merci! :)

kufa
kufa
Niveau 9
01 mars 2007 à 18:34:43

(HS) Reecrire la STL est un bon exercice, mais en pratique je trouve ca pas tres utile, et ce pour plusieures raisons:
en pratique, l´utilisation de la STL ne devrait se faire que dans les parties "utilitaires" d´un code, ie la ou les performances ne jouent pas. En effet, si je prends l´exemple d´un jv, personne ne veut (en tout cas personne ne devrait vouloir) utiliser la stl pour qqchose de time critical: pas assez flexible pour la gestion de la memoire utilisee, il est souvent plus que tres judicieux d´integrer (par exemple) une liste chainee dans la classe utilisee plutot que d´avoir un objet externe, mauvaise gestion du cache, etc.

Donc pour en revenir a tes moutons, sachant que je n´utlise que la STL pour des operations non time critical, ou pour mes tools.

dans les applications qui vous interesse quel algorithmes de la STL utilisez vous ?

Deja les classes que j´utilise le plus: vector, list, map, string (meme si j´utilise bcp plus ma version custom)
Algo: find, for_each

De quelle taille sont les donnees manipulees (max et moyenne) ?

Ca depends vraiment.. Par exemple, creation d´une table d´index pour les objets, j´ai une grosse map (disons en 100k elements). Les outils offline de generation de qqchose utilisent aussi du custom code plutot que la stl..
Mais la plupart du temps je travail sur des vector/list de moins de 100 elements, voir meme tres souvent de l´ordre de 4-5 elt.

Combien de temps prennent vos operation elementaires (max et moyenne) ?

Si j´utilise la STL pour qq chose qui est appele "souvent", je m´arrange pour toujours avoir de l´O(1), donc je ne fait aucun sort ou autre.
Sinon, aucune idee :)

/kUfa

godrik
godrik
Niveau 30
01 mars 2007 à 19:09:11

(réponse au HS)
Je ne suis pas completement d´accord avec ton:
"en pratique, l´utilisation de la STL ne devrait se faire que dans les parties "utilitaires" d´un code, ie la ou les performances ne jouent pas."

J´ai tendance a l´utiliser pour a peu pres tout parceque je ne cherche pas (basiquement) de performance. donc ca peut m´arriver de faire des sort de paquets d´un million d´element. Certes, ce n´est généralement pas ce qui prends le plus de temps de mon appli, mais ca peut en prendre une portion non négligeable.

Après, c´est sur que j´écris beaucoup de code expérimental et tres peu (pas du tout en fait) de code destiné à la production.

godrik
godrik
Niveau 30
01 mars 2007 à 19:11:20

en passant, par:
"Combien de temps prennent vos operation elementaires (max et moyenne) ?"

Je veux dire, ce sont des comparaison d´entiers, de flottant, de chaine de caractere ?
Dans le cas des tris, merges et cie, il y a aussi des affectations, est ce que ce sont des opérations lentes ?

kufa
kufa
Niveau 9
01 mars 2007 à 20:53:16

J´ai tendance a l´utiliser pour a peu pres tout parceque je ne cherche pas (basiquement) de performance.

Tu sous-entends donc que si tu cherchais a ameliorer tes performances tu utiliserais donc autre chose? (ce que je ferais perso) Mais bon reecrire la STL pour ameliorer les performances d´un code pour lequel tu ne cherches pas a avoir de bonnes performances n´est pas le plus utile *imo*, tu auras tjs moins de performances que si tu optimisais l´algo en question, et surtout c´est long de reecrire la stl.

Par contre je suis tout a fait d´accord sur le fait d´utiliser la STL pour le code experimental, c´est tres pratique, mais ca tombait dans ma categorie de code "utilitaire" (mon contexte etant l´optim de code que tu qualifie de "destine a la production").

Pour revenir a ta question initiale, mes principales comparaisons se font avec des int ou des chaines de caracteres. Un de nos algo au taf les plus lent car tres mal designe est la creation de notre arbre des noms de fichiers, qui inclut de nombreux tests avec des chaines de caracteres et de tres nombreuses affectations et allocations memoire..

godrik
godrik
Niveau 30
01 mars 2007 à 21:35:32

(HS, 36 15 mylife)

Pour eclaircir les choses, quand je dis que le code n´est pas destiné a la production, je veux dire qu´il ne tournera que pendant un temps relativment cours. Cela ne voulant pas dire qu´il consommera peu de temps CPU. Je parles ici de milliers d´heures CPU (ce qui représente en temps réel pour moi, moins de 3 jours).

Par contre, je passes assez peu de temps a les écrire. Donc je n´ai pas vraiment le temps de me pencher sur l´optimisation du code a proprement parler, une fois que le code fonctionne et s´exécute en temps acceptable, je le laisse tourner et je fais autre chose.

Merci pour les précisions.

dnob700
dnob700
Niveau 10
02 mars 2007 à 00:09:47

j´utilise rarement la STL, j´aurais plutôt tendance à recoder systématiquement mes algo même si ce n´est pas le plus productif.

Quand je m´en sers, c´est dans des programmes plutôt "scientifique" dont je veux qu´ils tournent le plus vite possible, je veux dire que les parties mécaniques du code ne doivent pas être le gros de travail, donc je préfère me reposer sur des algo déjà écrit (et sans bogue) que sur mon code.

Dans ce cas là, je me sers surtout des structures de données type set, list ou map etc. Pour y stocker des structures perso (pour des tailles typiques de quelques dizaine d´octets, avec quelques millier ou dizaine de millier d´élément). Et là soit j´utilise juste les iterateur pour les parcourir, et alors des recherches d´éléments (mais rarement autre chose).

Globalement, même si j´utilise la STL dans des zone "critique", le temps de calcul est toujours largement dominé par les calculs que je mène sur mes données, donc la STL elle même ne me parait pas trop critique.

Fvirtman
Fvirtman
Niveau 10
02 mars 2007 à 13:57:38

Personnellement, j´utilise (quasiment) systématiquement la STL.
J´ai déja recodé tous les algos dans les TP a la fac, mais personnellement, je ne pense pas avoir optimisé ça a mort (surtout les rééquilibrages d´arbres binaires, et autres algos du genre tres puissants, utilisés et optimisés par la STL)

Apres, de temps en temps, je me fais un semblant de liste chainée quand j´ai besoin (un pointeur next dans une structure...)

Mais c´est vrai que je suis "pro-STL"

LGV
LGV
Niveau 28
02 mars 2007 à 14:26:45

je contribue avec mon point de vue, mais pour eviter les redites, je me contenterai d´aller dans le sens de Kufa ; meme approche de mon cote : STL pour les protos/outils/etc. , mais implementations persos pour le code de production d´appli time-critical

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment