181 votes

Pourquoi un vecteur C++ est-il appelé un vecteur ?

La question est assez explicite, en fait. Je connais vaguement les vecteurs en maths, mais je ne vois pas vraiment le lien avec les vecteurs C++.

8 votes

Les vecteurs (grandeur + direction) en physique sont la première chose qui me vient à l'esprit dès que j'entends le mot vecteurs.

237voto

Mark Ruzon Points 1297

On l'appelle vecteur parce qu'Alex Stepanov, le concepteur de la bibliothèque standard de modèles, cherchait un nom pour le distinguer des tableaux intégrés. Il admet aujourd'hui qu'il a commis une erreur, car les mathématiques utilisent déjà le terme "vecteur" pour désigner une séquence de nombres de longueur fixe. C++11 aggrave cette erreur en introduisant une classe "array" qui se comporte de la même manière qu'un vecteur mathématique.

La leçon d'Alex : soyez très prudent chaque fois que vous donnez un nom à quelque chose.

1 votes

Mais les tableaux n'utilisent pas non plus l'allocation au tas, ce qui rend leur déplacement moins efficace. Nous avons également std::valarray, btw.

1 votes

Vous pouvez l'allouer sur le tas si vous souhaitez un déplacement peu coûteux.

2 votes

C'est bien de savoir qu'ils ont appris cette leçon, même si c'est trop tard. Bien que ... typedef ou #define puisse aussi régler le problème.

125voto

Mehrdad Afshari Points 204872

Définition mathématique d'un vecteur est un membre de l'ensemble S``n qui est une séquence ordonnée de valeurs dans un ensemble spécifique ( S ). C'est ce qu'un C++ vector magasins.

0 votes

Je vois. J'ai toujours imaginé les vecteurs comme étant à 2 ou 3 dimensions, donc je ne voyais pas le lien avec les vecteurs multidimensionnels...

23 votes

Les vecteurs ne sont généralement considérés comme étant à 2 ou 3 dimensions qu'en raison de leur utilisation en physique. Mais plus généralement, en mathématiques, ils désignent simplement un ensemble de nombres ayant un ordre (les ensembles mathématiques sont sans ordre, ils sont comme un sac rempli de choses). Un vecteur peut avoir un nombre quelconque d'éléments.

3 votes

@Skilldrick vous confondez vecteur en géométrie ou en physique (vecteur euclidien) et vecteur en algèbre linéaire (vecteur de coordonnées).

68voto

aib Points 18608

Un extrait de Le langage de programmation C++ par Bjarne Stroustrup :

"On pourrait dire que tableau de valeurs aurait dû être appelé vecteur parce qu'il s'agit d'un vecteur mathématique et que vecteur aurait dû être appelé tableau . Cependant, ce n'est pas ainsi que la terminologie a évolué."

59 votes

Pfftt qu'est-ce qu'il en sait, ce type. Je n'ai même jamais entendu parler de ce "Bjarne Stroustrup".

7 votes

Je me demande juste combien de "upvotes" du commentaire précédent sont en fait le résultat d'un "underflow"...

0 votes

Eh bien, non, Bjarne. Array est très clairement une pile allouée (à moins qu'elle ne soit déclarée static ) taille fixe (sauf VLA) contiguës (au moins dans la mémoire virtuelle) région de la mémoire habituellement utilisée pour stocker des éléments d'un seul type. Une meilleure idée serait de l'appeler da o dyarr o dyarray car il s'agit d'un tableau alloué dynamiquement . Il ne suffit pas de l'appeler un "tableau".

16voto

vartec Points 53382

Le nom vient de l'algèbre linéaire, où le vecteur est une matrice avec une seule colonne ou une seule ligne.

10voto

Juste pour dire pourquoi il n'est probablement pas appelé array : Parce que std::vector a une taille dynamique. Un tableau est conceptuellement de longueur fixe. La prochaine norme C++ a d'ailleurs une taille std::array qui a une taille fixe et doit être préféré à un simple tableau :

std::array<int, 4> f = { 1, 2, 3, 4 };

0 votes

La nouvelle norme C++ a-t-elle déjà été publiée ?

1 votes

Les vecteurs sont des valeurs pures, ce sont des éléments d'un ensemble qui, associés à une structure supplémentaire, forment un espace vectoriel abstrait. la notion de "changement de taille" d'un vecteur est une absurdité totale.

0 votes

@kai je pense qu'il y a une confusion ici. J'ai simplement argumenté pour expliquer pourquoi c'est no appelé tableau . Je n'ai pas essayé d'expliquer pourquoi c'est spécifiquement appelé vecteur . Un tableau en C++, même avant la standardisation du langage, a toujours eu une taille fixe, donc nommer la classe redimensionnable std::array ne serait pas bon.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X