web-dev-qa-db-fra.com

Que sont les vecteurs et comment sont-ils utilisés en programmation?

Je connais bien le concept mathématique/physique d'un vecteur en tant que grandeur et direction, mais je continue également à rencontrer des références à des vecteurs dans le contexte de la programmation (par exemple, C++ semble avoir une bibliothèque stl :: vector qui apparaît assez souvent sur SO).

D'après mon contexte, mon intuition est qu'il s'agit d'une construction assez primitive, utilisée le plus souvent pour représenter quelque chose le long d'un tableau de longueur variable (stocker sa taille sous forme de magnitude, je suppose), mais il serait très utile que quelqu'un puisse donnez-moi une explication plus complète, indiquant de préférence comment et pourquoi ils sont utilisés dans la pratique.

36
Lawrence Johnston

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

Les conteneurs de vecteurs sont implémentés en tant que matrices dynamiques; Comme d'habitude les tableaux, les conteneurs de vecteurs ont leur éléments stockés dans une mémoire contiguë endroits, ce qui signifie que leur les éléments sont accessibles non seulement en utilisant des itérateurs mais aussi en utilisant des offsets sur des pointeurs réguliers aux éléments.

Mais contrairement aux tableaux classiques, le stockage dans les vecteurs sont gérés automatiquement, permettant de l'élargir et contracté au besoin.

En outre, les vecteurs peuvent généralement contenir n'importe quel objet. Vous pouvez donc créer une classe contenant des informations sur les véhicules, puis stocker le parc dans un vecteur.

En plus de leur redimensionnement, les vecteurs offrent l’avantage de permettre l’accès en temps constant à des éléments individuels via un index, comme un tableau.

Le compromis pour le redimensionnement est que lorsque vous atteignez la capacité actuelle, il doit réaffecter et parfois copier davantage de mémoire. Cependant, la plupart des algorithmes d'augmentation de capacité doublent la capacité à chaque fois que vous frappez la barrière. Vous ne devez donc jamais la toucher plus que log2 (tas disponible), ce qui s'avère être peut-être une douzaine de fois dans le pire des cas pendant l'exécution du programme.

-Adam

39
Adam Davis

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

En programmation, ce nom "vecteur" était à l'origine utilisé pour décrire toute séquence de nombres scalaires de longueur fixe. Un vecteur de longueur 2 représente un point dans un plan 2D, un vecteur de longueur 3 représente un point dans un espace 3D, etc. Un vecteur de longueur 100 représente un point dans un espace à 100 dimensions (les mathématiciens n'ont aucune difficulté à penser à de telles choses).

Dans les bibliothèques de programmation modernes, ce nom de "vecteur" en est venu à désigner généralement une séquence de valeurs variable (pas nécessairement des nombres). Changer la taille (longueur ou dimension) d'un vecteur mathématique n'est pas quelque chose que vous feriez normalement sauf si vous effectuez une sorte d'opération de projection. Mais changer la longueur d'un vecteur de programmation contenant une séquence de chaînes peut être une opération courante.

19
Greg Hewgill

Les vecteurs mathématiques auxquels vous êtes habitués sont des tenseurs de rang un ; les structures de données en informatique n'obéissent pas nécessairement aux règles de transformation du tenseur. Comme il a été mentionné précédemment, ce ne sont que des tableaux pouvant se développer et se contracter.

7
duffymo

Les conteneurs de vecteurs sont implémentés sous forme de tableaux dynamiques; Tout comme les tableaux classiques, les conteneurs de vecteurs ont leurs éléments stockés dans des emplacements de stockage contigus, ce qui signifie que leurs éléments sont accessibles non seulement à l'aide d'itérateurs, mais également à l'aide de décalages sur des pointeurs normaux.

Mais contrairement aux baies standard, le stockage dans les vecteurs est géré automatiquement, ce qui permet de l’étendre et de le contracter selon les besoins.

Les vecteurs sont bons à:

  • Accéder aux éléments individuels par leur indice de position (temps constant).
  • Itération sur les éléments dans n'importe quel ordre (temps linéaire).
  • Ajouter et supprimer des éléments à sa fin (temps amorti constant).

REF

4
cgreeno

Extrait du livre SICP :

Pour modéliser la mémoire informatique, nous utilisons un nouveau type de structure de données appelée vecteur. En résumé, un vecteur est un objet de données composé dont les éléments individuels sont accessibles au moyen d’un index entier en une durée indépendante de l’index.

2
Nemanja Trifunovic

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

2
Adrian Grigore

Je peux comprendre votre confusion à partir des noms (j'avais aussi l'habitude de me perdre). L'idée d'un vecteur dans la programmation graphique 3D, qui est plus proche de la définition mathématique, n'aide pas. En mathématiques, un vecteur peut être considéré comme une matrice à une dimension de longueur arbitraire (la longueur étant le nombre de dimensions de votre système de coordonnées). Dans la plupart des OO langages, les vecteurs sont essentiellement des matrices à une dimension (matrices), d’où leur nom. Ils n'ont rien à voir avec les coordonnées, sauf si le programmeur décide de les utiliser pour cette tâche (ce qui est rare - je ne l'ai jamais vue). En outre, ils ne disposent généralement pas d’opérateurs mathématiques pour effectuer la multiplication de matrice ou d’autres opérations similaires. Donc, leur nature unidimensionnelle indique à quel point la similitude se termine. Je laisserai aux autres réponses le soin d’expliquer les fonctionnalités et les utilisations du conteneur OO, qu’ils maîtrisent déjà.

2
rmeador

Pour vous aider à vous rappeler la signification du mot «vecteur» dans CS, il peut être utile de faire référence à la racine latine vehere, qui signifie transmettre ou porter. Ainsi, un vecteur porte ou contient des choses, d’une manière générale.

0
Ezra Justin Lee

Outre la structure de données en C++, un vecteur est également un terme désignant un pointeur sur le code. F.e. un vecteur d'interruption pointe vers le code d'interruption à appeler.

0
Azure

Les vecteurs en programmation sont essentiellement des tableaux dynamiques dans lesquels le stockage est automatiquement géré, ce qui permet de l’étendre et de le contracter selon les besoins. Le meilleur, c’est qu’ils permettent également d’accéder en temps constant à des éléments individuels via un index, comme un tableau classique.

0
Budhathoki Bijaya