Quelles sont les vecteurs et comment sont-ils utilisés dans la programmation?

je suis familier avec le concept mathématique/Physique d'un vecteur comme une magnitude et une direction, mais je rencontre aussi des références aux vecteurs dans le contexte de la programmation (par exemple c++ semble avoir une bibliothèque STL::vector qui apparaît assez fréquemment sur SO).

mon intuition du contexte a été qu'ils sont une construction assez primitive le plus souvent utilisé pour représenter quelque chose le long des lignes d'un tableau de longueur variable (stocker sa taille comme la magnitude, I présumons), mais il serait vraiment utile que quelqu'un puisse me fournir une explication plus complète, en incluant de préférence comment et pourquoi ils sont utilisés dans la pratique.

35
demandé sur Lawrence Johnston 2009-02-03 21:44:06

11 réponses

http://www.cplusplus.com/reference/stl/vector/

les conteneurs vectoriels sont mis en œuvre comme suit: tableaux dynamiques; tout aussi réguliers les tableaux, les conteneurs vectoriels ont leurs éléments stockés dans un entrepôt contigu endroits, ce qui signifie que leur les éléments ne sont pas seulement accessibles utiliser des itérateurs mais aussi des offsets régulier sur les pointeurs vers des éléments.

mais contrairement aux tableaux réguliers, le stockage dans vecteurs est géré automatiquement, lui permettant d'être élargi et le contrat de besoin.

de plus, les vecteurs peuvent typiquement contenir n'importe quel objet - de sorte que vous pouvez créer une classe pour contenir des informations sur les véhicules, puis stocker le parc dans un vecteur.

ce qui est bien avec les vecteurs, à part le redimensionnement, c'est qu'ils permettent toujours l'accès en temps constant à des éléments individuels via index, tout comme un tableau.

Le compromis pour le redimensionnement, c'est que lorsque vous appuyez sur la capacité actuelle il réattribuer, et parfois copier, plus de mémoire. Cependant, la plupart des algorithmes d'augmentation de capacité doublent la capacité à chaque fois que vous touchez la barrière, de sorte que vous ne l'avez jamais touché plus de log2(tas disponible) qui s'avère être peut-être une douzaine de fois dans le pire des cas tout au long de l'opération du programme.

- Adam

36
répondu Adam Davis 2009-02-03 18:47:26

En mathématiques, un vecteur peut être considéré comme une combinaison de direction et de l'ampleur. Cependant, on peut aussi le considérer comme une coordonnée. Par exemple, un vecteur de magnitude 5 et un angle d'environ 37 degrés sur l'horizontale représente un point sur un plan 2D. Ce point peut aussi être représenté avec la paire de coordonnées cartésiennes (3, 4). Cette paire (3, 4) est aussi un vecteur mathématique.

dans la programmation, ce nom "vecteur" a été utilisé à l'origine pour décrire tout séquence de longueur fixe de nombres scalaires. Un vecteur de longueur 2 représente un point dans un plan en 2D, un vecteur de longueur 3 représente un point dans un espace 3D, et ainsi de suite. Un vecteur de longueur 100 représente un point dans un espace de 100 dimensions (les mathématiciens n'ont aucun mal à penser à de telles choses).

dans les bibliothèques de programmation modernes, ce nom "vecteur" signifie généralement un variable ordre de grandeur des valeurs (pas nécessairement des nombres). Modification de la taille (longueur, ou dimensionalité) d'un vecteur mathématique n'est pas quelque chose que vous feriez normalement à moins que vous ne faites une sorte d'opération de projection. Mais changer la longueur d'un vecteur de programmation qui contient une séquence de chaînes pourrait être une opération courante.

16
répondu Greg Hewgill 2009-02-03 18:59:28

les vecteurs mathématiques que vous utilisez sont tenseurs de rang

7
répondu duffymo 2009-02-03 18:51:06

les conteneurs vectoriels sont implémentés comme des tableaux dynamiques; tout comme les tableaux réguliers, les conteneurs vectoriels ont leurs éléments stockés dans des emplacements de stockage contigus, ce qui signifie que leurs éléments peuvent être accessibles non seulement en utilisant des itérateurs mais aussi en utilisant des offsets sur des pointeurs réguliers vers des éléments.

mais contrairement aux tableaux réguliers, le stockage dans des vecteurs est manipulé automatiquement, ce qui permet de l'étendre et de la contracter au besoin.

les vecteurs sont bons à:

  • accéder à des éléments individuels par leur indice de position (temps constant).
  • itération des éléments dans n'importe quel ordre (temps linéaire).
  • ajouter et supprimer des éléments de son extrémité (temps amorti constant).

REF

3
répondu cgreeno 2009-02-03 19:06:21

Puisqu'au moins deux des autres réponses sont collées de ce site, vous pouvez aussi lire le reste de la description... : -)

1
répondu Adrian Grigore 2009-02-03 18:49:47

je peux comprendre votre confusion à partir des noms (Je l'habitude d'être confus par cela aussi). Il n'est pas aidé par l'idée d'un Vecteur graphiques 3D, programmation, qui est plus proche de la définition mathématique. En mathématiques, un vecteur peut être considéré comme une matrice 1-dimensionnelle de longueur arbitraire (la longueur étant le nombre de dimensions de votre système de coordonnées). Dans la plupart des langues OO, les vecteurs sont essentiellement des matrices à une dimension (matrices), d'où le nom. Ils n'ont rien à faites avec les coordonnées à moins que le programmeur décide de les utiliser pour cette tâche (ce qui est rare -- je ne l'ai jamais vu). Ils n'ont généralement pas d'opérateurs mathématiques pour faire la multiplication de matrice ou des opérations similaires. Donc la nature 1-dimensionnelle d'eux est au sujet d'où la similitude se termine. Je laisse aux autres réponses le soin d'expliquer les caractéristiques et les utilisations du conteneur OO, sur lequel ils ont déjà une poignée.

1
répondu rmeador 2009-02-03 18:52:02

SICP book:

pour modéliser la mémoire de l'ordinateur, nous utilisons un nouveau type de structure de données appelé vecteur. Abstraitement, un vecteur est un objet de données composé dont les éléments individuels peuvent être consultés au moyen d'un indice entier dans un laps de temps qui est indépendant de l'indice.

1
répondu Nemanja Trifunovic 2009-02-03 19:04:55

les vecteurs de programmation sont essentiellement des tableaux dynamiques dans lesquels le stockage est manipulé automatiquement, ce qui permet de l'étendre et de la contracter au besoin.La meilleure chose est qu'ils permettent aussi d'accéder en temps constant des éléments individuels via l'index, comme un tableau normal.

1
répondu Budhathoki Bijaya 2018-07-13 12:42:17

https://isocpp.org/wiki/faq/containers a beaucoup d'informations dont vous avez besoin pour comprendre ce qui entoure cette question. Il établira un contraste entre les vecteurs et les listes liées, les tableaux, et ainsi de suite.

aussi, de Stroustrup Tour (http://www.stroustrup.com/Tour.html), Chapitre 9:

la plupart des calculs impliquent la création de collections de valeurs.... Une classe avec le but principal de détenir des objets est appelé ... container. ... Le plus utile stl container vector. stl::vector est une suite d'éléments d'un type donné. Les éléments sont stockés de façon contiguë en mémoire.

donc un vecteur STL est un ensemble de valeurs du même type - de cette façon, c'est comme la signification mathématique de vecteur/module-mais le principal problème est la façon dont les éléments sont stockés.

0
répondu isomorphismes 2015-09-01 16:50:03

outre la structure de données en C++, un vecteur est aussi un terme pour un pointeur vers le code. F. E. un vecteur d'interruption pointe vers le code d'interruption à invoquer.

0
répondu Azure 2017-07-20 23:41:00

pour vous aider à vous rappeler le sens CS du mot "vecteur", il peut être utile de se référer à la racine latine vehere, qui signifie transporter ou transporter. Ainsi, un vecteur porte ou contient des choses, en général.

0
répondu Ezra Justin Lee 2017-10-20 05:31:23