Je viens de revenir en utilisant C++ et en essayant de convertir un simple programme Java que j'ai écrit récemment.Quelle est la version C++ de Java ArrayList?
Quel est l'équivalent préféré de Java ArrayList en C++?
Je viens de revenir en utilisant C++ et en essayant de convertir un simple programme Java que j'ai écrit récemment.Quelle est la version C++ de Java ArrayList?
Quel est l'équivalent préféré de Java ArrayList en C++?
Utilisez le std::vector
class de la bibliothèque standard.
Hmmm ... à partir de l'autre réponse, il semble que le vecteur ne soit pas implémenté comme une liste chaînée? Ai-je raison? J'utilise cette liste comme une collection qui aura un chiffre d'affaires assez élevé d'objets ajoutés et supprimés. Ce tableau est-il réellement la meilleure implémentation? Ou y a-t-il une version de liste liée? – interstar
@interstar - absolument correct. Si vous voulez vraiment la sémantique de la liste liée, alors utilisez 'std :: list', bien que vous perdiez l'indexabilité (pas' operator [] ') donc ce n'est pas vraiment un tableau. 'list' qui a ses propres idiosyncracies telles que' vector' est souvent un meilleur choix. Dans les conteneurs Standard C++, vous allez devoir faire des compromis dans un sens ou dans l'autre. Regardez 'deque', qui peut offrir une meilleure perf pour vous. Il est (relativement) facile de mesurer 'vector' vs' deque' vs 'list' car ils sont largement interchangeables dans le code - il suffit d'utiliser un typedef pour votre conteneur, par exemple. 'typedef vector
Eh bien, je vais d'abord essayer le vecteur. Parce que l'index est utile. Si c'est trop lent, je peux passer à la liste des liens. Merci – interstar
Un couple de points supplémentaires utilisent ici vector
.
Contrairement ArrayList
et Array
en Java, vous ne avez pas besoin de faire quoi que ce soit spécial pour traiter un vector
comme un tableau - le stockage sous-jacent en C++ est garanti d'être contigus et efficacement indexables. Contrairement à ArrayList
, un vector
peut contenir efficacement des types primitifs sans encapsulation comme un objet à part entière.
Lors de la suppression d'éléments d'un vector
, sachez que les éléments situés au-dessus de l'élément retiré doivent être déplacés vers le bas pour préserver le stockage contigu. Cela peut devenir coûteux pour les gros conteneurs.
Assurez-vous que si vous stockez des objets complexes dans le vector
, leur constructeur de copie et les opérateurs d'affectation sont efficaces. Sous les couvertures, C++ STL les utilise pendant l'entretien du conteneur.
Conseil sur reserve()
de stockage initial (c'est-à-dire au moment de la construction ou de l'initialisation du vecteur) pour minimiser la réallocation de la mémoire lors d'une extension ultérieure de Java vers C++.
La meilleure réponse de loin, devrait être la acceptée. –
http://stackoverflow.com/questions/14426338/java-arraylist-in-c –