2010-10-23 27 views
9

Je vois actuellement beaucoup de questions qui sont marquées C++ et qui concernent la gestion des tableaux.
Il ya même des questions qui demandent des méthodes/caractéristiques pour les tableaux qu'un std::vector fournirait sans aucune magie.Avantages de l'utilisation de tableaux au lieu de std :: vector?

Donc je me demande pourquoi tant de développeurs choisissent des tableaux sur std::vector en C++?

Répondre

9

En général, je préfère fortement utiliser un vecteur sur un tableau pour un travail non trivial; Cependant, il existe certains avantages des tableaux.

  • matrices sont légèrement plus compact: la taille est implicite
  • tableaux sont non-redimensionnable; parfois cela est souhaitable
  • tableaux ne nécessitent pas l'analyse des en-têtes supplémentaires STL (compilation)
  • il peut être plus facile d'interagir avec le code linéaire C avec un tableau (par exemple, si C est allocation et C++ utilise)
  • tableaux de taille fixe peuvent être intégrés directement dans un struct ou un objet, ce qui peut améliorer la localisation de mémoire et de réduire le nombre d'allocations de tas nécessaires
+2

Aussi: * les tableaux sont plus rapides; * les tableaux peuvent être initialisés statiquement (alors que les vecteurs sont toujours initialisés dynamiquement, au moment de l'exécution) – mojuba

+10

Hélas la raison pour laquelle "tant de développeurs choisissent des tableaux sur std :: vector en C++" vient du fait qu'ils lisent des vieux/mauvais livres et maintenant hésitent à passer à un nouveau niveau de programmation. Je doute que beaucoup considèrent même l'un de vos points avant de décider d'utiliser des tableaux. Aussi n'importe quel vecteur fournit, n'importe quel programmeur doit théoriquement pouvoir utiliser des tableaux, parce que si vous ne comprenez pas les pointeurs et leur arithmétique vous ne pouvez pas être un bon programmeur C++ –

4

Parce que 03 C++ n'a pas vecteur littéraux. L'utilisation de tableaux peut parfois produire un code plus succinct.

Par rapport à l'initialisation du tableau:

char arr[4] = {'A', 'B', 'C', 'D'}; 

initialisation du vecteur peut sembler quelque peu bavard

std::vector<char> v; 
v.push_back('A'); 
v.push_back('B'); 
... 
1

Je pense que c'est parce que beaucoup de programmeurs C++ viennent de C et ne comprennent pas encore les avantages de l'utilisation de vector et tous les goodies supplémentaires STL qui viennent gratuitement avec ses conteneurs.

+0

Vous pouvez avoir raison. Mais vous pouvez toujours utiliser certains des bonus supplémentaires (algorithmes STL) avec des tableaux. –

1

Vous avez beaucoup plus de contrôle avec des tableaux

Que diriez-vous:

1) vous traitez avec des ensembles de données colossales où les données doivent être des fichiers mis en correspondance et non attribué malloc ou new en raison de sa taille . Dans ce scénario, s'inquiéter de ce qu'il faut faire si vous n'avez pas réservé assez d'espace d'adressage au début peut être discutable, mais je suppose que vous pouvez démapper - étendre - remapper le fichier, sauf si la fragmentation d'adresse ou mon second point l'interdit.

2) Code qui utilise un multiprocesseur sans verrouillage. Les hits de performance d'arrêt des threads pour ré-allocation (ou tout autre "goodie STL") peuvent être inacceptables, donc utiliser des tableaux, vous avez beaucoup plus de contrôle, vous devrez peut-être appeler beaucoup de fonctions pour mettre en pause d'autres threads avant de redimensionner n'importe quoi.

BTW, je suis habituellement avec 1 et 2 en même temps. Les tableaux de structures + pointeurs fonctionnent à merveille, Compiler avec C++ car vous pouvez toujours utiliser des fonctionnalités C++ ailleurs dans le code.Je suis sûr que je pourrais penser à beaucoup d'autres exemples si j'ai essayé assez fort