À propos de la classe Vector

Résolu
cs_inaden Messages postés 618 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 27 août 2010 - 11 mai 2009 à 15:49
cs_inaden Messages postés 618 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 27 août 2010 - 11 mai 2009 à 19:19
Bonjour,
question de cours...
Je viens de découvrir qu'il existe une classe Vector, d'après ce qui est dit, plus optimiser que la classe Array, mais plusieurs trucs me chiffonnent...
D'abord, il semblerait que la classe ne trouve pas automatiquement le nombre d'élément qu'elle comporte, et qu'on soit obliger de lui attribuer un nombre d'élément dès le départ... est-ce vrai ou faux.
Si je fais :
var vecteurPrenoms:Vector.<String> = new Vector.<String>(3);
var nbre:int=vecteurPrenoms.length;
vecteurPrenoms[0]="Bobby";
vecteurPrenoms[1]="Alfred";
trace("nombre d'élément de vecteurPrenoms = "+nbre);
trace("les éléments sont : "+vecteurPrenoms[0] +" et "+ vecteurPrenoms[1] + " et "+vecteurPrenoms[2]);
vecteurPrenoms.push ( "James" );
trace("Après ajout les éléments sont : "+vecteurPrenoms[0] +" et "+ vecteurPrenoms[1] + " et "+vecteurPrenoms[2]);

James n'est pas pris en compte, par contre si je l'ajoute avec :
vecteurPrenoms[2]="Jim";

Là il est pris en compte
Aussi, comment fait-on si on ne connait pas le nombre d'élément que va comporter le "vecteur" ???

J'ai aussi essayé autre chose :
var vecteurNombre:Vector. = new Vector.([5,45,856,41526,23]);
var nbre:int=vecteurNombre.length;
trace("nombre d'éléments de vecteurNombre = "+nbre);
trace(vecteurNombre[0]);

Qui est un exemple du bouquin
Pour le premier trace;.. il me donne 0 et pour le second un message d'erreur lié au fait qu'il y a zéro éléments et qu'il ne peut donc définir l'élément demandé.

Si quelqu'un a des explications pour tout cela... merci d'avance.

Tout vient à qui sait attendre

8 réponses

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
11 mai 2009 à 16:59
Le Vector est un "Array Typé" et toutes les fonctions dispo dans la Classe Array sont les mêmes que pour le Vector (avec les conditions de typage).
Tu peux faire des splice, des push, des POP, etc ... donc tu peux manipuler, trier et ressortir tout ce que tu désires. Vector est un Array, mais plus stricte (et donc plus rapide).

Array = Vector.<*>, si tu préfères.

Peg'
3
gremlins7 Messages postés 380 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 28 décembre 2009
11 mai 2009 à 16:21
Salut,
je crois que c'est parceque tu specifie la taille en ecrivant
var vecteurPrenoms:Vector.<String> = new Vector.<String>(3);

Si tu fais seulement ça:

var vecteurPrenoms:Vector.<String> = new Vector.<String>;

alors tu peux utiliser push. A priori tu peux pas faire un push sur un vector de taille fixe
voila un exemple que j'ai fait et qui marche bien :
http://files.codes-sources.com/fichier.aspx?id=48998&f=Scene3D%2fScene3D.as
0
cs_inaden Messages postés 618 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 27 août 2010 2
11 mai 2009 à 16:27
Salut, et merci de ta réponse...
Hélas ça marche pas, si j'enlève le (3) j'ai la réponse :
nombre d'élément de vecteurPrenoms = 0
(au premier trace)
RangeError: Error #1125: L'index 2 est en dehors des limites 2.
    at vector_fla::MainTimeline/frame1()
(pour la suite)
Je vais par contre étudier ton package.
En tout cas, merci de ton aide.

Tout vient à qui sait attendre
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
11 mai 2009 à 16:28
Pour créer un vector déjà remplis, il faut faire :

var vecteurNombre:Vector. = Vector.([5,45,856,41526,23]);
//sans le "new" !

Peg'
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_inaden Messages postés 618 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 27 août 2010 2
11 mai 2009 à 16:44
Merci peg... ça roule juste une petite question en plus le length de mon "vecteur" comme cela est conseillé, il ne change pas après un ajout et l'on est obligé de passer en direct ou ajouter une unité comme dans l'exemple ci-dessous :

var vecteurPrenoms:Vector.<String> = Vector.<String>(["bobby","Alfred","Robert"]);
var nbre:int=vecteurPrenoms.length;
trace("nombre d'élément de vecteurPrenoms = "+nbre);
trace(vecteurPrenoms[0]);
vecteurPrenoms.push ( "james");
trace(vecteurPrenoms[3]);
trace("Après ajout nombre d'élément de vecteurPrenoms = "+nbre);
trace("Après ajout nombre d'élément de vecteurPrenoms en directe = "+vecteurPrenoms.length);

Est-ce la bonne méthode ?
Et encore merci.

Sinon, ton anim à l'air super Gremlins7... j'espère que j'arriverais à la comprendre.

Tout vient à qui sait attendre
0
cs_inaden Messages postés 618 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 27 août 2010 2
11 mai 2009 à 17:01
Ok,
merci, je vais donc essayé de m'en servir.

Tout vient à qui sait attendre
0
gremlins7 Messages postés 380 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 28 décembre 2009
11 mai 2009 à 19:13
Desolé, j'aurais ptet du preciser dans mon dernier post que si tu indique pas la taille, il faut evidement ranger au moin un élement en utilisant push...autant pour moi
0
cs_inaden Messages postés 618 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 27 août 2010 2
11 mai 2009 à 19:19
Yes, je m'en suis aperçu en repartant de ce que disais Peg.
En tout cas, merci de ce complément d'information.

Tout vient à qui sait attendre
0
Rejoignez-nous