Ensemble ?? [C++] - Programmation
Marsh Posté le 12-02-2002 à 20:29:42
Et si tu veux prendre un element au hasard de ce tableau, tu fais une classe qui contient ce tableau et qui contient une fonction membre qui pioche un élément du dit tableau...
Hum...c'est...trivial
Marsh Posté le 12-02-2002 à 20:39:50
euh... array... => vecteur ?!?
Neni, j'aurais du dire un sac de taille indéterminée
Le nombre d'item qui sont dans le sac varie. Un vecteur n'est donc pas bon dans mon cas.
Si je comprends bien ce que vous avez dit, c'est de faire un vecteur, de générer un nombre aléatoire et d'aller pêcher l'élément correspondant. Si c'est le cas, je m'attendais à mieux... pfff...
Sérieusement now, j'avais espéré qu'une telle structure existe dans les librairies de base en supposant que ce serait plus otpimisé qu'une solution maison.
[jfdsdjhfuetppo]--Message édité par Majca Jalasu--[/jfdsdjhfuetppo]
Marsh Posté le 12-02-2002 à 20:44:30
Array != Vecteur
Une array est d'une taille prédéterminé Array[x] ou Array *q = new Array[x];
Un vecteur: Vector.add() etc..
Marsh Posté le 12-02-2002 à 20:46:10
Ben non qu'est ce que tu veux que y ait une librairie qui fasse ca, c'est 3 lignes de code!!!
Quand au vecteur, ben si, c'est justement le bon cas si tu as une taille indeterminé et que tu veux piocher un élément au hasard. Un vecteur n'est pas un array et peut se réduire et s'augmenter à l'infini.
Prend le "vector" de la SDL par exemple...Y a peut-être même des fonctions pour te sortir un élément au hasard!!!
Marsh Posté le 12-02-2002 à 20:46:51
Et merde griller....
Marsh Posté le 12-02-2002 à 20:50:57
oui oui, désolé !
J'ai dis vecteur parce que j'ai pour abitude de ne pas utiliser la libraire vector...
=>Pour moi, Vecteur = type [cst];
quand à vector, c'est une liste.
Bref, "chez moi", un vecteur est statique et une liste dynamique. C'est comme ça qu'on me l'a appris.
Tu n'es pas d'accord ?
Marsh Posté le 12-02-2002 à 20:52:57
On parle de la même chose mais avec d'autre nom...
Bref, on es d'accord.
Quand à ces "trois lignes", ok, c'est tout con à faire.
Mais je m'étais dis que si cette "librairie" avait existé, son code aurait très certainement été meilleur que le mien .
Marsh Posté le 12-02-2002 à 20:58:29
Pour vector, je pense que c'est un type en algorithmie et pas seulement dans la STL. Ca existe en java par exemple (je crois).
Et ce n'est pas une simple liste...
Dans une liste tu ne peux pas accéder aux éléments de manière aléatoire (indépandamment des uns des autres). Ce que tu peux faire avec un vecteur. En revanche, la complexité algorithmique pour ajouter un élément dans un vecteur est plus élevé que dans une liste, etc. etc.
Comme tu le vois, l'utilisation d'une liste et d'un vecteur est différente et dépend de tes besoins
Sinon, oui, je crois qu'on parlait tous de la même chose
Marsh Posté le 12-02-2002 à 21:07:22
C'est bien la raison pour laquelle je tiens à remplacer ma liste par autre chose
Je n'ai jamais utiliser d'objet vector et ne connais donc pas les performences du machin.
J'avais peur que ce soit effectivement très pratique mais aussi et surtout très "industrie" si vous voyez ce que je veux dire...
Vector est-il sotcké sur un vecteur (=>statique) et dès qu'on insère un nouvel élément, il recopie le tout dans un vecteur de taille n+1 ou bien c'est une série d'élément (=>dynamique) chaque élément pointant vers l'élément suivant.
J'ai l'impression que la première solution est la bonne... et qu'il ne fait que "masquer" ça.
Quelqu'un en sait-il plus à ce niveau là ?
[jfdsdjhfuetppo]--Message édité par Majca Jalasu--[/jfdsdjhfuetppo]
Marsh Posté le 12-02-2002 à 21:12:52
Doc sur la STL (vector, set, list, ...)
http://www.sgi.com/tech/stl/
Marsh Posté le 12-02-2002 à 21:16:34
Pour le vector de la STL, oui on est proche de la première idée...(celle du tableau). C'est tout sauf une liste parce que l'idée comme je l'ai souligné précédement, c'est d'avoir un container qui permette de faire des choses différentes d'une liste.
Maintenant, ca ne veut pas dire que l'on se tape des réallocations de mémoire à chaque suppression ou insertion d'éléments!! Heureusement non, et l'algo de la STL est probablement suffisament évolué pour que ca ne se passe pas ainsi....Il ne fait pas "que "masquer" ça."
Comme tu le dis si bien "je m'étais dis que si cette "librairie" avait existé, son code aurait très certainement été meilleur que le mien."
En terme de tableau dynamique, je pense que l'on peut faire difficilement mieux que la STL!
Marsh Posté le 12-02-2002 à 22:14:36
l'idee generale du vector
c'est qu'il grossit comme tu l'indiques
mais de maniere plus intelligente parce
que sinon le cout d'ajout d'un element
serait trop important:
en fait il est important pour le xieme
element, x etant determine en
fonction de la derniere fois qu'on a du redimensionner le truc.
Exemple: tu as un tableau de 4 elements
tu vas ajouter un element sauf que pas bete
tu te dis c'est con de redimensionner a 5
alors que j'aurais surement envie d'en ajouter
un 6e-> tu redimensionnes a 8
et ainsi de suite tu redimensionneras quand tu atteindras
9 elements. Le tout c'est d'avoir une bonne fonction
qui garantit suffisamment peu de redimensionnements
Rien ne t'empeche de dimensionner ton tableau a l'avance
quand tu sais deja a peu pres
combien d'elements tu auras dans ton tableau.
(si tu n'en sais rien on ne peut rien faire pour toi).
Et le tableau n'est pas redimensionne a la baisse
sauf quand tu lui demandes explicitement.
Et tu ne peux pas enlever "simplement" un element
sans tout decaler ceux qui sont derriere.
Une liste a chaque fois que tu ajoutes un element
tu fais appel a un malloc
(enfin ca peut etre fait de maniere plus intelligente)
et tu dois pouvoir
ajouter et enlever des elements en temps constant
mais en contrepartie, pour atteindre l'element N tu
dois te taper les N-1 premiers! pas cool..
Bref pour faire ce que tu veux
(acces aleatoire a des donnees et taille dynamique)
le vector est surement le plus indique.
(si tu peux majorer le nombre d'elements rien
ne t'empeche de faire un tableau statique
avec un compteur du nombre d'elements !)
A+
LEGREG
Marsh Posté le 12-02-2002 à 22:26:10
Majca Jalasu a écrit a écrit : Bref, "chez moi", un vecteur est statique et une liste dynamique. C'est comme ça qu'on me l'a appris. ![]() |
c'est un peu trop categorique comme affirmation
Tout est une fonction de cout relatif
un vecteur (ou tableau) a une tendance fortement
statique mais peut etre redimensionne
et meme simplement bien dimensionne dès la premiere fois.
Une liste chainee a une tendance plus dynamique mais peut etre un boulet a manipuler pour des algorithmes exigeants (contiguite de la memoire, copie conforme, acces aleatoire etc..).
Comme toujours c'est a toi de voir quelle sera ton utilisation du
truc et parfois c'est debile d'appliquer des recettes toutes faites quand des solutions non algorithmiques
(c'est a dire faisant appel au bon sens et non pas
aux recettes toutes faites de la theorie) sont possibles.
A+
LEGREG
Marsh Posté le 12-02-2002 à 20:12:50
Existe-t-il un structure de type "ensemble" en c++ ?
J'entends par ensemble un "sac" => j'ai un ensemble dans lequel j'insère divers éléments.
Ensuite, je désire pouvoir en prendre un au hasard.
Bref, J'aurais besoin d'un moyen de "piocher" au hasard un élément d'une structure globale quelconque.
Majca
Ps: Une liste que je parcours jusqu'à l'item RAND_NUM, j'ai déjà !