Wat is de C++ -versie van Java’s ArrayList

Ga gewoon terug naar het gebruik van C++ en probeert een eenvoudig Java-programma te converteren dat ik onlangs heb geschreven.

Wat is het geprefereerde gelijkwaardig aan de Java ArrayList in C++?


Antwoord 1, Autoriteit 100%

Gebruik de std::vectorclass van de standaardbibliotheek.


Antwoord 2, Autoriteit 67%

Een paar extra punten her gebruik van vectorhier.

In tegenstelling tot ArrayListen Arrayin Java, hoef je niets bijzonders te doen om een ​​vectorals een array te behandelen – de onderliggende Opslag in C++ is gegarandeerd om aaneengesloten en efficiënt indexeerbaar te zijn.

In tegenstelling tot ArrayList, een vectorkan efficiënt de primitieve typen bevatten zonder inkapseling als een volwaardig object.

Houd er bij het verwijderen van items uit een vector, houd er rekening mee dat de items boven het verwijderde artikel moeten worden verplaatst om de aangrenzende opslag te behouden. Dit kan duur worden voor grote containers.

Zorg ervoor dat u ingewikkelde objecten in de vectoropslaat dat hun exemplaarconstructeur en toewijzingsexploitanten efficiënt zijn. Onder de covers gebruikt C++ STL deze tijdens containerhuishouding.

Advies over reserve()ING Storage Upfront (dwz op vectorconstructie of initialilzatietijd) om geheugenherstel op latere uitbreiding te minimaliseren, draagt ​​zich over van Java naar C++.


Antwoord 3

Net als andere antwoorden De dichtstbijzijnde is std::vector.

Maar er is een belangrijk ding om te overwegen, de complexiteit van de ruimte.

De C++ -vector heeft compiler-afhankelijke berekening wanneer de huidige capaciteit vol is. Wanneer de capaciteit vol is, groeien sommige compilers de vectorcapaciteit exponentieel en wat losjes exponentieel.

Voor Java ArrayList zijn er geen exacte details gespecificeerd door normen voor het herberekenen van de capaciteit wanneer deze vol is. Sommigen hebben een ruwe berekening van 150% plus één. Maar niet zeker of dat de exacte berekening is.

Other episodes