À propos de la classe Vector

[Résolu]
Signaler
Messages postés
618
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
27 août 2010
-
Messages postés
618
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
27 août 2010
-
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

Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
10
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'
Messages postés
380
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
28 décembre 2009

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
Messages postés
618
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
27 août 2010
2
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
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
10
Pour créer un vector déjà remplis, il faut faire :

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

Peg'
Messages postés
618
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
27 août 2010
2
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
Messages postés
618
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
27 août 2010
2
Ok,
merci, je vais donc essayé de m'en servir.

Tout vient à qui sait attendre
Messages postés
380
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
28 décembre 2009

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
Messages postés
618
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
27 août 2010
2
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