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::vector
class van de standaardbibliotheek.
Antwoord 2, Autoriteit 67%
Een paar extra punten her gebruik van vector
hier.
In tegenstelling tot ArrayList
en Array
in Java, hoef je niets bijzonders te doen om een vector
als een array te behandelen – de onderliggende Opslag in C++ is gegarandeerd om aaneengesloten en efficiënt indexeerbaar te zijn.
In tegenstelling tot ArrayList
, een vector
kan 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 vector
opslaat 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.