6
votes

Le vecteur de vecteurs peut-il être réaffecté car l'un des éléments a été réaffecté?

permet de dire que j'ai un vecteur de vecteurs: xxx

Je sais que le vecteur peut être réaffecté s'il n'a pas suffisamment de capacité.
Je me demande s'il y a une possibilité de vecteur table réaffectant si je le fais: xxx

est-il possible que la réaffectation de table [ i] réaffectant aussi table ?


0 commentaires

5 Réponses :


6
votes

non. Cela ne provoquera pas une réaffectation dans la table .

Le seul opérateur / fonction appelé sur Table est l'opérateur [] , qui promet de temps constant. Si la réaffectation s'est produite, cela violerait la promesse de temps constante.

La raison pour laquelle vous pouvez modifier la taille du vecteur des sous-vecteurs (la table [i] s) sans nécessiter d'espace supplémentaire à affecter dans le vecteur de niveau supérieur est un stockage de vecteur est géré via un pointeur sur un bloc de mémoire. Ainsi, augmenter la quantité d'éléments utilisée vecteur ne modifie pas la taille du vecteur objet .

Tableau [I] .Size () Modifications sans changement Tailleof (Tableau [I]) . .


0 commentaires

1
votes

Non, car le contenu de table est inchangé - il contient toujours exactement les mêmes instances qu'auparavant. Seul le stockage de la table [i] doit être réaffecté. Vecteur contient un pointeur sur le stockage - la taille de l'objet vectoriel est toujours la même, seule la matrice référencée peut se développer ou rétrécir. Par conséquent, la table [I] n'est pas de plus en plus en croissance, si c'est ce que vous demandez - seul le tableau indique que c'est.


0 commentaires

1
votes

non. Appeler une méthode d'un «code> vecteur S ne serait pas affecter le vecteur lui-même.

Considérez ceci comme appel suivant: parent_object.child_Object.Method (), où enfant_Object ne connaît rien sur le parent_Object. La méthode () ne peut pas changer l'état de parent_object.

La même chose va pour le vecteur de vecteurs. (Techniquement, vous stockez ici une gamme de pointeurs à des tableaux. Redimensionnement L'une des matrices d'enfants est une opération locale et modifie le pointeur approprié, mais ne modifie pas la taille de la matrice mère.)


0 commentaires

4
votes

Non, cela n'aura pas d'incidence: la mise en œuvre des vecteurs est basée sur un tableau dans la plupart des cas (c'est à peu près l'idée des vecteurs), bien que cela ne soit pas défini dans la pierre dans la spécification de langue. En tout cas, la nature dynamique des vecteurs exclut toute forme de séquence inline dans la structure de données, c'est-à-dire. La séquence des éléments gérés par la classe de la classe ne peut pas être à l'intérieur de la classe de la catégorie , mais est nécessairement un chunck de mémoire situé ailleurs, avec un pointeur de la classe.

Votre type de données est donc similaire à un réseau dynamique de pointeurs à des matrices dynamiques. Réaffecter une matrice pointue n'aura pas d'effet sur la matrice de pointeur.


0 commentaires

1
votes

Non, cela ne peut pas arriver. redimensionner ne change pas la taille du vecteur objet - il ne modifie que le stockage dynamique que le vecteur gère . Donc, du point de vue du vecteur extérieur, tous les éléments restent inchangés (et ont la même taille).


0 commentaires