12
votes

Avantages de l'utilisation des tableaux au lieu de std :: vecteur?

Je vois actuellement beaucoup de questions qui sont étiquetées C ++ et portent des tableaux de manipulation.
Il y a même des questions qui posent des questions sur les méthodes / fonctionnalités des tableaux qu'un std :: vecteur fournirait sans aucune magie.

Donc, je me demande pourquoi tant de développeurs chèymes sont des tableaux sur std :: vecteur en c ++?


0 commentaires

5 Réponses :


13
votes

En général, je préfère fermement utiliser un vecteur sur un tableau pour un travail non trivial; Cependant, il y a quelques avantages des tableaux:

  • Les matrices sont légèrement plus compactes: la taille est implicite. Les tableaux
  • ne sont pas redisisables; Parfois, c'est désirable.
  • Les tableaux n'ont pas besoin d'analyser des en-têtes STL supplémentaires (heure de compilation).
  • Il peut être plus facile d'interagir avec le code droit avec un tableau (par exemple, si c est alloué et C ++ utilise).
  • Les tableaux de taille fixe peuvent être incorporés directement dans une structure ou un objet, ce qui peut améliorer la localité de mémoire et réduire le nombre d'allocations de tas nécessaires.

2 commentaires

Aussi: * Les tableaux sont plus rapides; * Les matrices peuvent être initialisées statiquement (tandis que les vecteurs sont toujours initialisés de manière dynamique, au moment de l'exécution)


Hélas la raison pour laquelle "tant de développeurs chèques choisi des tableaux sur STD :: Vector in C ++" est simplement parce qu'ils lisent des livres anciens / mauvais et sont désormais réticents à passer à un nouveau niveau de programmation. Je doute que beaucoup considèrent même aucun de vos points avant de décider de l'utilisation des tableaux. Aussi, quel que soit le vecteur fournit, tout programmeur doit être théoriquement capable d'utiliser des tableaux, car si vous ne comprenez pas les pointeurs et leur arithmétique, vous ne pouvez pas être un bon programmeur C ++



6
votes

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

comparé à l'initialisation de la matrice: xxx

initialisation vectorielle peut sembler un peu verbeuse xxx


0 commentaires

2
votes

J'irais pour STD :: Array disponible en C ++ 0x au lieu de tableaux simples pouvant également être initialisés comme des tableaux standard avec une liste d'initialistes

https://fr.cppreference.com/w/cpp/container/array


0 commentaires

1
votes

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


1 commentaires

Vous pouvez avoir raison. Mais vous pouvez toujours utiliser certaines des goodies supplémentaires (algorithmes STL) avec des tableaux.



1
votes

Vous avez beaucoup plus de contrôle avec des tableaux

Que diriez-vous:

1) Vous avez affaire à des ensembles de données colossaux où les données doivent être mappées des fichiers et non attribués avec malloc ou neuf en raison de sa taille. Sous ce scénario inquiétant de ce qu'il faut faire si vous n'avez pas réservé suffisamment d'espace d'adresses au début, car je suppose que vous pouviez vous détendre - éteindre - remappe le fichier, sauf interdit par fragmentation d'adresse ou mon deuxième point.

2) code qui utilise un multiprocession sans verrouillage. Les hits de performance d'arrêt des fils de réaffectation (ou de toute autre "goodie stl") peuvent être inacceptables, d'où utilisez des tableaux d'utilisation, vous avez peut-être beaucoup plus de contrôle, vous devrez peut-être appeler beaucoup de fonctions pour suspendre d'autres threads avant de redimensionner n'importe quoi.

BTW, je traite habituellement avec 1 et 2 en même temps. Les tableaux de structures + pointres fonctionnent de manière merveilleuse, compilant avec C ++ parce que vous pouvez toujours utiliser certaines fonctionnalités C ++ ailleurs dans le code. Je suis sûr que je pouvais penser à beaucoup d'autres exemples si j'ai essayé assez fort


0 commentaires