Właśnie wraca do używania C++ i próbuje przekonwertować prosty program napisany przeze mnie w języku Java.Co to jest wersja C++ Java ArrayList
Jaki jest preferowany odpowiednik Java ArrayList w C++?
Właśnie wraca do używania C++ i próbuje przekonwertować prosty program napisany przeze mnie w języku Java.Co to jest wersja C++ Java ArrayList
Jaki jest preferowany odpowiednik Java ArrayList w C++?
Użyj std::vector
class ze standardowej biblioteki.
Hmmm ... z drugiej odpowiedzi, brzmi jak wektor nie jest zaimplementowany jako lista połączona? Czy mam rację? Używam tej listy jako kolekcji, która będzie miała dość wysoki obrót dodanymi i usuniętymi obiektami. Czy ta macierz jest rzeczywiście najlepszą implementacją? Czy istnieje wersja z listą załączoną? – interstar
@interstar - absolutnie poprawne. Jeśli naprawdę chcesz semantykę z listą odsyłaczy, użyj 'std :: list', ale stracisz indeksowalność (brak operatora []'), więc nie jest to tak naprawdę tablica. 'list', który ma swoją własną idiosynkrazję, tak że' wektor' jest często lepszym wyborem. W standardowych kontenerach C++ będziesz musiał pójść na kompromis w jedną lub w drugą stronę. Spójrz na "deque", które może zaoferować ci lepsze osiągnięcie. Jest to (stosunkowo) łatwe do zmierzenia 'vector' vs' deque' vs 'list', ponieważ są one w dużym stopniu wymienne w kodzie - wystarczy użyć typedef do swojego kontenera np. 'typedef vector
cóż, najpierw spróbuję wektora. Ponieważ indeks jest przydatny. Jeśli jest zbyt wolny, mogę przejść do listy połączonej. Dzięki – interstar
Kilka dodatkowych punktów ponownie użyć vector
tutaj.
przeciwieństwie ArrayList
i Array
w Javie, nie musisz robić nic specjalnego do leczenia vector
jako Array - instrumentu bazowego przechowywanie w C++ jest gwarantowana być ciągłe i efektywne wiertła.
W przeciwieństwie do ArrayList
, vector
może wydajnie trzymać typy podstawowe bez hermetyzacji jako pełnoprawnego obiektu.
Podczas usuwania przedmiotów z vector
należy pamiętać, że przedmioty nad usuniętym przedmiotem muszą zostać przesunięte w dół, aby zachować przyległą pamięć. To może stać się drogie w przypadku dużych pojemników.
Upewnij się, że przechowujesz złożone obiekty w vector
, że ich konstruktor kopiowania i operatory przypisania są wydajne. Pod osłonami C++ STL wykorzystuje je podczas porządkowania kontenerów.
Porada na temat reserve()
ing przechowywania z góry (np. W budowie wektorowej lub czas inicjalizacji) w celu zminimalizowania realokacji pamięci na późniejszym rozszerzeniu przenosi się z Java do C++.
Lepsza odpowiedź zdecydowanie powinna być zaakceptowana. –
http://stackoverflow.com/questions/14426338/java-arraylist-in-c –