Qu'est-ce que Vecteur de la structure de données
Je sais Vector en C++ et Java, c'est comme un Tableau dynamique, mais je ne trouve pas de définition générale de la notion de Vecteur structure de données. Quel est donc le Vecteur? Est Vecteur d'un général de la structure de données(comme arrray, pile, file, arbre,...) ou c'est juste un type de données en fonction de la langue?
C'est très certainement une question d'opinion.
Il n'est pas évident pour moi de ce que vous voulez signifier par "général de la structure de données" et "type de données".
Il n'est pas évident pour moi de ce que vous voulez signifier par "général de la structure de données" et "type de données".
OriginalL'auteur Ikarus | 2015-09-12
Vous devez vous connecter pour publier un commentaire.
Le mot "vecteur" appliquée à l'informatique/programmation est emprunté à partir de mathématiques, ce qui peut rendre l'utilisation de confusion (même à votre question pourrait être sur plusieurs sujets).
L'exemple le plus simple de vecteurs en mathématiques est le numéro de ligne, utilisée pour enseigner les mathématiques élémentaires (en particulier pour aider à visualiser les nombres négatifs, la soustraction de nombres négatifs, l'addition des nombres négatifs, etc).
Le vecteur est une distance et la direction à partir d'un point. C'est pourquoi il peut confondre la discussion, parce qu'un vecteur de la structure de données POURRAIT être trois points X,Y,Z, dans une structure utilisée dans les moteurs graphiques 3D ou 2D point (juste X,Y). Dans ce contexte, la soustraction de deux de ces points résultats dans un vecteur - vecteur décrit dans quelle mesure et dans quelle direction se rendre de l'un des opérandes source à l'autre.
Cela s'applique à l'entreposage, à l'instar de la stl de vecteurs ou de Java vecteurs, dans cet espace de stockage est représentée comme une distance à partir d'une adresse (une adresse mémoire est semblable à un point dans l'espace, ou sur un numéro de ligne).
Le concept est lié à des tableaux, car les tableaux pourrait être le stockage alloué pour un vecteur, mais je soutiens que le vecteur est un concept plus large que celui de la matrice. Un vecteur doit inclure la notion de distance à partir d'un point de départ, et si vous pensez que le début d'un tableau comme point de départ, la distance à la fin du tableau est-il de la taille.
Ainsi, la structure de données représentant un vecteur doit inclure la taille, tandis qu'un tableau n'a pas de stockage pour y inclure la taille, il est supposé par la façon dont il est affecté. C'est-à-dire, si vous allouer dynamiquement un tableau, il n'existe pas de structure de données le stockage de la taille de ce tableau, le programmeur doit assumer pour savoir que la taille, ou le stocker dans un certains nombre entier ou long.
Le vecteur structure de données (par exemple, la conception d'un vecteur de classe) N'a pas besoin de stocker de la taille, de sorte qu'au moins, il y aurait un point de départ (la base d'un tableau, ou d'une adresse en mémoire) et une distance de ce point en indiquant la taille.
C'est vraiment de la "RAM", même si, dans la description, car il y a un point qui n'est pas encore décrit ce qui doit être une partie des données décrivant le vecteur de la notion de taille de l'élément. Si un vecteur représente octets, et la mémoire de stockage est généralement mesurée en octets d'une adresse et d'une distance (ou la taille) représentent un vecteur d'octets, mais rien d'autre - et c'est une machine au niveau de la pensée. Une pensée supérieure, celle de la structure, a sa propre taille - dire, de la taille d'un float ou double, ou d'une structure ou une classe en C++. Quelle que soit la taille de l'élément est, la mémoire nécessaire pour stocker N d'eux exige que le vecteur structure de données ont une certaine connaissance de CE que c'est le stockage, et la taille de cette chose est. C'est pourquoi vous devez penser en termes de "un vecteur de chaînes" ou "d'un vecteur de points". Un vecteur doit également stocker un élément de taille.
Ainsi, une base de données vecteur de la structure doit avoir:
Une adresse (point de départ)
Une taille d'élément (chaque chose il des magasins de X octets de long)
Un certain nombre d'éléments stockés (combien d'éléments de fois la taille de l'élément est "minimum" taille de stockage).
Un important "hypothèse" de fait dans cette simple règle de 3 élément de la liste des entrées dans le vecteur structure de données est que l'adresse est alloué de la mémoire, qui doit être libéré à un certain point, et à être protégé contre l'accès au-delà de la fin du vecteur.
Qui signifie qu'il y a quelque chose qui manque. Afin de faire un vecteur de travail en classe, il est reconnaissable différence entre le nombre d'ÉLÉMENTS stockés dans le vecteur, et la quantité de mémoire ALLOUÉE pour ce stockage. Typiquement, vous pourriez vous rendre compte de l'utilisation de vector de la STL, il peut "connaître", il a de la place pour stocker 10 éléments, mais, actuellement a seulement 2 d'entre eux.
Donc, un travail de classe vector aurait ÉGALEMENT pour stocker le montant de l'allocation de mémoire. Ce serait de savoir comment il pourrait étendre dynamiquement lui-même - il y a maintenant suffisamment d'informations pour étendre la capacité de stockage automatiquement.
De la pensée à travers comment vous en faire un vecteur de classe opèrent vous donne la structure de données nécessaire pour opérer un vecteur de classe.
Ouch! C'était un flux de conscience post de l'expérience, mais vous trouverez quelque chose le long de ces lignes dans plusieurs textes sur des structures de données. Je n'ai pas eu un livre ou d'une référence sur l'objet dans mes mains en plus de 20 ans (je suis développeur depuis '81), donc un titre exact m'échappe. Aussi, je pourrais m'étendre, que STL vecteurs peuvent avoir des constantes statiques ou peut-être "accordables" des membres indiquant les options d'extension - qui est, par exemple, certains vecteurs peuvent très bien s'étendre de 10 éléments à la fois, tandis que d'autres peuvent ainsi développer de 1000 points à la fois.
OriginalL'auteur JVene
C'est un tableau alloué dynamiquement l'espace, à chaque fois que vous dépassez cet espace nouvelle place dans la mémoire de l'attribution et de l'ancien tableau est copié dans le nouveau. Vieux on est libéré ensuite.
En outre, vecteur généralement alloue plus de mémoire que nécessaire, afin de ne pas avoir à copier toutes les données, lorsqu'un nouvel élément est ajouté.
Cela puisse paraître, que les listes sont alors beaucoup mieux, mais ce n'est pas nécessairement le cas. Si vous ne changez pas votre vecteur souvent (en termes de taille), puis la mémoire cache de l'ordinateur les fonctions de mémoire beaucoup mieux avec des vecteurs, que des listes, parce qu'ils sont continuus dans l'espace mémoire. Inconvénient, c'est quand vous avez de gros vecteur de, que vous avez besoin pour développer. Ensuite, vous devez accepter de copier grande quantité de données à un autre espace dans la mémoire.
Qui plus est. Vous pouvez ajouter de nouvelles données à la fin et à l'avant du vecteur. En raison du Vecteur sont semblable au tableau, puis chaque fois que vous voulez ajouter un élément au début du vecteur toute la table doit être copié. Ajout d'éléments à la fin du vecteur est de loin plus efficace. Il n'y a pas un problème avec les listes chaînées.
Vecteur donne accès aléatoire à l'interne gardé de données, alors que les listes,files,piles ne sont pas.
OriginalL'auteur DawidPi