Jakie są różnice między tablicą a wektorem w C ++? Przykładem różnic mogą być biblioteki, symbolika, umiejętności itp.
Szyk
Tablice zawierają określoną liczbę elementów określonego typu. Aby kompilator mógł zarezerwować wymaganą ilość miejsca podczas kompilacji programu, należy określić typ i liczbę elementów, które będzie zawierać tablica, gdy zostanie zdefiniowana. Kompilator musi być w stanie określić tę wartość podczas kompilacji programu. Po zdefiniowaniu tablicy należy użyć identyfikatora tablicy wraz z indeksem, aby uzyskać dostęp do określonych elementów tablicy. [...] tablice są indeksowane przez zero; to znaczy, pierwszy element ma indeks 0. Ten schemat indeksowania wskazuje na ścisły związek w C ++ między wskaźnikami i tablicami oraz reguły, które język definiuje dla arytmetyki wskaźników.
- Dokumentacja kieszonkowa C ++
Wektor
Wektor to sekwencja obiektów o dynamicznej wielkości, która zapewnia
operator[]
losowy dostęp w stylu tablicy . Funkcja członkowskapush_back
kopiuje swoje argumenty za pomocą konstruktora kopiującego, dodaje tę kopię jako ostatni element w wektorze i zwiększa jej rozmiar o jeden.pop_back
robi dokładnie odwrotnie, usuwając ostatni element. Wstawianie lub usuwanie elementów z końca wektora zajmuje zamortyzowany stały czas, a wstawianie lub usuwanie z dowolnego innego miejsca zajmuje czas liniowy. To są podstawy wektorów. Jest ich o wiele więcej. W większości przypadków wektor powinien być pierwszym wyborem zamiast tablicy w stylu C. Przede wszystkim mają dynamiczne rozmiary, co oznacza, że mogą rosnąć w razie potrzeby. Nie musisz przeprowadzać wszelkiego rodzaju badań, aby znaleźć optymalny rozmiar statyczny, jak w przypadku tablic C; wektor rośnie w razie potrzeby i można go ręcznie zmienić na większy lub mniejszy, jeśli zajdzie taka potrzeba. Po drugie, wektory oferują sprawdzanie granic za pomocąat
funkcji składowej (ale nie za pomocąoperator[]
), dzięki czemu możesz coś zrobić, jeśli odwołasz się do nieistniejącego indeksu, zamiast po prostu obserwować awarię programu lub gorzej, kontynuując wykonywanie z uszkodzonymi danymi.- Książka kucharska C ++
Odpowiedzi:
tablice:
malloc
);sizeof
(stąd powszechny idiomsizeof(arr)/sizeof(*arr)
, który jednak zawiedzie po cichu, gdy zostanie użyty nieumyślnie na wskaźniku);std::vector
:&vec[0]
jest gwarantowana do pracy zgodnie z oczekiwaniami);begin()
/end()
Methods, zwykłe STLtypedef
, ...)Weź również pod uwagę „nowoczesną alternatywę” dla tablic -
std::array
; W innej odpowiedzi opisałem już różnicę międzystd::vector
astd::array
, warto się temu przyjrzeć.źródło
Dodam, że tablice są konstrukcjami bardzo niskiego poziomu w C ++ i podczas „uczenia się lin” powinieneś starać się trzymać od nich jak najdalej - nawet Bjarne Stroustrup to zaleca (jest projektantem C ++).
Wektory są bardzo zbliżone do tej samej wydajności co tablice, ale z wieloma udogodnieniami i funkcjami bezpieczeństwa. Prawdopodobnie zaczniesz używać tablic podczas łączenia się z interfejsami API, które zajmują się surowymi tablicami lub podczas budowania własnych kolekcji.
źródło
Te odniesienia w dużej mierze odpowiedziały na twoje pytanie. Mówiąc najprościej, długości wektorów są dynamiczne, a tablice mają stały rozmiar. używając tablicy, określasz jej rozmiar w deklaracji:
w przypadku wektorów wystarczy to zadeklarować i dodać elementy
czasami nie będziesz znać liczby potrzebnych elementów, więc wektor byłby idealny w takiej sytuacji.
źródło