Jaka jest różnica między wektorem a tablicą w C++?

Jaka jest różnica między wektorem a tablicą w C++?
Istnieje wiele różnic między wektorem a tablicą w C++. Jednak główne podobieństwa są bardzo ważne. Głównymi podobieństwami są to, że są to zarówno lista, a każda z nich utrzymywałaby sekwencję danych tego samego typu. Główne różnice są następujące: rozmiar wektora (długość) można naturalnie zwiększyć, ale rozmiar macierzy jest ustalony i nie można ich zwiększyć. Elementy można wstawić do wektora, ale nie można ich wstawić w tablicy. Elementy można dołączyć na końcu wektora, ale nie można ich dołączyć na końcu tablicy. Wektor jest klasą, z której utworzone są inne obiekty wektorowe, ale tablica jest stałym wskaźnikiem do sekwencji danych tego samego typu. Wektor ma metody (funkcje członka), ale tablica nie jest, a zatem wektor nazywany jest strukturą danych. Podczas gdy wskaźnik może być używany z tablicą, iteratory są używane z wektorem. Iterator jest opracowanym wskaźnikiem.

Przed tablicą nie można uwzględnić żadnego elementu. Z C ++ 17 i wyższą, element może być zawarty przed wektorem za pomocą funkcji elementu emplace ().

W pozostałej części tego artykułu ilustrują różnice między wektorem a tablicą. Dla każdego punktu wspomniany jest niezdolność do tablicy lub podano jej tępy lub uciążliwy sposób osiągnięcia tego samego celu.

Treść artykułu

  • Tworzenie wektora lub tablicy
  • Rosnący rozmiar
  • Wkładanie
  • Dołączenie
  • Wymazanie elementu
  • Jasne
  • Zamiana
  • Rozmiar
  • Wniosek

Tworzenie wektora lub tablicy

Wektor można stworzyć na kilka sposobów. Podstawowy sposób jest następujący:

wektor vtr = „a”, „b”, „c”, „d”, „e”;

Odpowiednio, tablica zostanie utworzona w następujący sposób:

char arr [] = „a”, „b”, „c”, „d”, „e”;

Zwróć uwagę na różnicę w operantach, które znajdują się po lewej stronie operatora przypisania. Liczbę elementów wektora można następnie dodać lub zmniejszyć, ale rozmiar tablicy pozostaje ustalony, w tym przypadku 5.

Aby mieć i używać wektora w programie, program powinien zacząć od:

#włączać
za pomocą przestrzeni nazw Std;

Mieć i korzystać z tablicy w programie, nie jest potrzebna dyrektywa preprocesor.

Rosnący rozmiar

Poniższy kod pokazuje, w jaki sposób wektor początkowo dwóch elementów jest zwiększany do czterech elementów, używając funkcji członka push_back ():

wektor VTR (2);
vtr [0] = „a”;
vtr [1] = „b”;
vtr.push_back („c”);
vtr.push_back („d”);

Ten kod powinien znajdować się w ciele funkcyjnym. Dla tablicy, a ponieważ tablica ma ustalony rozmiar, utwórz tablicę dla maksymalnej liczby elementów przewidzianych, przed dodaniem elementów za pomocą operatora []. Przykład:

Char ARR [4];
arr [0] = „a”;
ARR [1] = „B”;
// Dodawanie elementów
arr [2] = „c”;
ARR [3] = „D”;

Ponadto ten kod powinien znajdować się wewnątrz ciała funkcyjnego.

Wkładanie

W poniższym kodzie element jest wstawiany przed elementem wskazanym przez iterator, P:

vectorvtr = „a”, „b”, „d”, „e”;
wektor :: iterator p = vtr.zaczynać();
++P;
++P;
char ch = „c”;
vtr.Wstaw (P, CH);
dla (int i = 0; iCout<

Wyjście to:

A B C D E

Pierwsze stwierdzenie kodu tworzy obiekt wektorowy. „C”, który powinien być przed „D” według porządku alfabetycznego, jest tutaj nieobecny. Drugie stwierdzenie zwraca iterator, który wskazuje na pierwszy element wektora. Następne dwa stwierdzenia zwiększają wskaźnik, aby wskazać „d”. Oświadczenie po przypisaniu „C” do CH. W tym segmencie kodu ostatnia instrukcja wprowadza „C” przed „D”, za pomocą iteratora.

Jeśli chodzi o tablicę, nie można wstawić elementu. Ze względu na takie ograniczenia dla tablicy, wektor i inne pojemniki zostały zaprojektowane.

Uwaga: Do wstawienia elementu przed wektorem można również użyć funkcji Insert ().

Dołączenie

Dołączenie oznacza dodanie elementów z tyłu. Do dodawania elementów z tyłu wektora można użyć funkcji push_back (). Tablicy nie można dołączyć. Jedynym sposobem na obejście tego problemu dla tablicy jest utworzenie tablicy dla maksymalnego rozmiaru przewidywanego. Wpisz elementy od samego początku. Wtedy w tablicy pozostaną trochę przestrzeni (komórki). Następnie, jeśli istnieje jakaś potrzeba dodania elementów z tyłu, dopasuj elementy (wartości) w przestrzeni za pustymi (które mają wartości domyślne).

Wymazanie elementu

Dla wektora element można usunąć za pomocą iteratora. Iterator wskazuje następnie na następny element, który był tam przed usunięciem. Poniższy kod usuwa „B”:

vectorvtr = „a”, „b”, „c”, „d”, „e”;
wektor :: iterator q = vtr.zaczynać();
++Q;
vtr.usunąć (q);
dla (int i = 0; iCout<
Cout<Cout<< *q <Wyjście to:

A c d e
C

Żaden element tablicy nie można usunąć, choć można go zmienić.

Jasne

Wszystkie elementy wektora można usunąć, a jego funkcja członka Clear (), w następujący sposób:

vectorvtr = „a”, „b”, „c”, „d”, „e”;
vtr.jasne();
dla (int i = 0; iCout<

Wyjście to nic. Najlepszą rzeczą związaną z tablicą jest zastąpienie wszystkich elementów wartością domyślną. Z całkowitą wartością domyślną wynosi 0. Poniższy kod ilustruje:

int arr [] = 1, 2, 3, 4, 5;
dla (int i = 0; i<5; i++)
arr [i] = 0;

dla (int i = 0; i<5; i++)
Cout<

Wyjście to:

0 0 0 0 0

Z znakiem wartością domyślną jest znak NUL, \ 0. Poniższy kod ilustruje:

char arr [] = „a”, „b”, „c”, „d”, „e”;
dla (int i = 0; i<5; i++)
arr [i] = '\ 0';

dla (int i = 0; i<5; i++)
Cout<

Dane wyjściowe nic nie pokazuje.

Zamiana

Nawet jeśli dwa wektory nie są tego samego rozmiaru, ich elementy można zamienić, z funkcją członka swap (). Poniższy kod pokazuje to:

wektor vtr1 = „a”, „b”, „c”, „d”, „e”;
wektor vtr2 = 'f', 'g', 'h';
VTR1.swap (vtr2);
Cout<< "Content of new vtr1:" <dla (int i = 0; iCout<< vtr1[i] << ";

Cout<Cout<< "Content of new vtr:" <dla (int i = 0; iCout<< vtr2[i] << ";

Aby zamienić dwie tablice, muszą mieć tę samą długość. Tablica nie ma funkcji członka (bez metod). Aby więc zamienić elementy do tablic, kod należy zapisać w następujący sposób:

char arr1 [] = „a”, „b”, „c”, „d”, „e”;
char arr2 [] = 'f', 'g', 'h', 'i', 'j';
dla (int i = 0; i<5; i++)
char temp = arr1 [i];
arr1 [i] = arr2 [i];
arr2 [i] = temp;

Cout<< "Content of new arr1:" <dla (int i = 0; i<5; i++)
Cout<< arr1[i] << ";

Cout<Cout<< "Content of new arr2:" <dla (int i = 0; i<5; i++)
Cout<< arr2[i] << ";

Wyjście to:

Treść nowego ARR1:
F g h i j
Treść nowego ARR2:
A B C D E

Rozmiar

Rozmiar wektora jest zwracany przez jego funkcję członka, rozmiar (). To znaczy, że jest to określone w czasie wykonywania. Ilustracja:

vectorvtr = „a”, „b”, „c”, 'd';
int sz = vtr.rozmiar();
Cout<Wyjście to 4. Rozmiar tablicy musi być wskazany na początku, jak pokazuje następujący kod:

char arr [4] = „a”, „b”, „c”, 'd';

Można to również zrobić:

char arr [7] = „a”, „b”, „c”, 'd';

To znaczy umieszczenie liczby (wielkości), która jest wyższa niż domniemany rozmiar (w tym przypadku 4). Jednak liczba nie powinna być mniejsza niż liczba początkowych elementów.

Tablica o zmiennej długości

Rozmiar tablicy można jednak (nie określony) w czasie wykonywania. W takim przypadku tablica będzie musiała zostać utworzona w funkcji lub w jakimś podobnym konstrukcji. Poniższy program ilustruje to:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
void fn (int n)
Char arr [n];
arr [0] = „a”;
ARR [1] = „B”;
arr [2] = „c”;
ARR [3] = „D”;
dla (int i = 0; iCout<
Cout<
int main ()

fn (4);
powrót 0;

Wyjście to:

A B C D

Wniosek

Główne różnice między wektorem a tablicą są następujące: wielkość (długość) wektora można naturalnie zwiększyć, ale tablica jest ustalona i nie można ich zwiększyć. Elementy można wstawić do wektora, ale nie można ich wstawić w tablicy. Elementy można dołączyć na końcu wektora, ale nie można ich dołączyć na końcu tablicy. Wektor jest klasą, z której utworzone są inne obiekty wektorowe, ale tablica jest stałym wskaźnikiem do sekwencji danych tego samego typu. Wektor ma metody (funkcje członka), ale tablica nie jest, a zatem wektor nazywany jest strukturą danych. Podczas gdy wskaźnik może być używany z tablicą, iteratory są używane z wektorem. Iterator jest opracowanym wskaźnikiem. Tablica albo pokazuje swoją niezdolność do pracy, albo ma tępy lub uciążliwy sposób osiągnięcia tego samego celu dla każdej różnicy.