Quel est le C++ version de Java ArrayList
Juste retour à l'aide de C++ et d'essayer de convertir un simple programme Java que j'ai écrit récemment.
Ce qui est le préféré équivalent à la Java liste de tableaux en C++?
Vous devez vous connecter pour publier un commentaire.
Utiliser le
std::vector
de la classe de la bibliothèque standard.std::list
, si vous perdez la capacité d'indexation (pas deoperator[]
) donc c'est pas vraiment un tableau.list
qui a ses propres particularités, telles quevector
est souvent un meilleur choix. En C++ Standard des conteneurs, vous allez avoir à faire des compromis d'une manière ou l'autre. Regardezdeque
, qui peut offrir de meilleur perf pour vous. C'est (relativement) facile à mesurervector
vsdeque
vslist
comme ils sont largement interchangeables dans le code, il suffit d'utiliser un typedef pour votre conteneur par exempletypedef vector<MyObj> MyList
.LinkedList
. Aussi, même si vous avez une assez forte rotation des objets ajoutés et supprimés de la liste,vector
peut-être encore plus vite quelist
aussi longtemps que vous allouer suffisamment d'espace pour elle d'abord qu'elle n'a pas besoin de ré-allouer (c'est à dire, donner le maximum d'espace, il ne devrait jamais avoir besoin).vector
comme le go-to de la structure des données pour la plupart des choses. Les listes chaînées sont pas "plus rapide lorsque vous faites beaucoup d'insertions/délétions," depuis le milieu de la liste, sauf si vous êtes directement stocker des objets (plutôt que des pointeurs) et les objets sont soit assez grande ou ont non négligeable de constructeurs/destructeurs. C'est en grande partie parce que le théorique algorithmique opération d'ordre importe moins que la localité des données en raison de la mise en cache.deque
est souvent mieux quevector
, maisdeque
est toujours basée sur la baie.list
", mais "l'utilisation des pointeurs au lieu de direct de confinement." Cela dit, mon essentiel "inutile" commentaire a été largement inspiré par un ex-collègue de travail avec près de deux décennies d'expérience dont les opinions que j'ai utilisé pour invoquer peut-être un liiiiiiiiiittle trop.Un couple de points supplémentaires pour l'utilisation de
vector
ici.Contrairement à
ArrayList
etArray
en Java, vous n'avez pas besoin de faire quelque chose de spécial pour traiter unvector
comme un tableau - le stockage sous-jacent en C++ est garanti d'être contiguës et efficacement à plaquettes indexables.Contrairement à
ArrayList
, unvector
peut efficacement tenir types primitifs sans encapsulation comme un acteur à part entière de l'objet.Lors de la suppression d'éléments à partir d'un
vector
, sachez que les points au-dessus de l'élément supprimé à être déplacé vers le bas pour préserver stockage contigu. Cela peut être coûteux pour les grands conteneurs.Assurez-vous que si vous stockez des objets complexes dans le
vector
que leur constructeur de copie et l'affectation des opérateurs sont efficaces. Sous les couvertures, C++ STL utilise ces cours conteneur de ménage.Des conseils sur
reserve()
ing de stockage à l'avance (c'est à dire. au vecteur de construction ou de initialilzation temps) afin de minimiser les réallocation de mémoire plus tard à l'extension porte sur de Java C++.