logo

Wektor w C++ STL

Wektory to to samo, co tablice dynamiczne, z możliwością automatycznej zmiany rozmiaru po wstawieniu lub usunięciu elementu, a ich przechowywanie jest automatycznie obsługiwane przez kontener. Elementy wektorowe są umieszczane w ciągłym magazynie, dzięki czemu można uzyskać do nich dostęp i przeglądać je za pomocą iteratorów. W wektorach dane wstawiane są na końcu. Wstawianie na końcu zajmuje trochę czasu, ponieważ czasami może zaistnieć potrzeba rozszerzenia tablicy. Usunięcie ostatniego elementu zajmuje tylko stały czas, ponieważ nie następuje zmiana rozmiaru. Wstawianie i usuwanie na początku lub w środku jest liniowe w czasie.

Co to jest std::vector w C++?

std::wektor w C++ jest szablonem klasy, który zawiera kontener wektorów i jego funkcje członkowskie. Jest zdefiniowany wewnątrz plik nagłówkowy. Funkcje składowe klasy std::vector zapewniają różne funkcjonalności kontenerom wektorowym.



Składnia deklarowania wektora w C++

  std::vector   vectorName;>

gdzie typ danych to typ danych każdego elementu wektora. Możesz usunąć std:: jeśli już korzystałeś z przestrzeni nazw std.

Inicjalizacja wektora w C++

Możemy zainicjować wektor w następujący sposób:

1. Inicjalizacja przy użyciu listy

Ta inicjalizacja odbywa się za pomocą deklaracji. Tutaj przekazujemy listę elementów konstruktorowi wektorów, aby utworzyć wektor z określonymi elementami.



  vector   name({   value1, value2, value3 ....  });>

2. Inicjalizacja Z pojedynczą wartością

Ta inicjalizacja jest również wykonywana za pomocą deklaracji. Tutaj określamy rozmiar wektora, a następnie inicjujemy każdy element wektora wartością.

  vector   name(size, value);>

3. Inicjalizacja z innego wektora

Ta inicjalizacja służy do utworzenia wektora będącego dokładną kopią other_vec.

  vector   name(other_vec);>

Poniżej opisano niektóre powszechnie używane funkcje składowe klasy std::vector:



Iteratory

  1. zaczynać() – Zwraca iterator wskazujący na pierwszy element wektora
  2. koniec() – Zwraca iterator wskazujący element teoretyczny, który następuje po ostatnim elemencie wektora
  3. rzacznij() – Zwraca iterator odwrotny wskazujący na ostatni element wektora (początek odwrotny). Przechodzi od ostatniego do pierwszego elementu
  4. renderowanie() – Zwraca iterator odwrotny wskazujący element teoretyczny poprzedzający pierwszy element wektora (uważany za odwrotny koniec)
  5. cbegin() – Zwraca stały iterator wskazujący na pierwszy element wektora.
  6. kilka() – Zwraca stały iterator wskazujący element teoretyczny, który następuje po ostatnim elemencie wektora.
  7. crbegin() – Zwraca stały iterator odwrotny wskazujący na ostatni element wektora (początek odwrotny). Przechodzi od ostatniego do pierwszego elementu
  8. wiara() – Zwraca stały iterator odwrotny wskazujący na element teoretyczny poprzedzający pierwszy element wektora (uważany za odwrotny koniec)

C++




// C++ program to illustrate the> // iterators in vector> #include> #include> > using> namespace> std;> > int> main()> {> >vector<>int>>g1;> > >for> (>int> i = 1; i <= 5; i++)> >g1.push_back(i);> > >cout <<>'Output of begin and end: '>;> >for> (>auto> i = g1.begin(); i != g1.end(); ++i)> >cout << *i <<>' '>;> > >cout <<>' Output of cbegin and cend: '>;> >for> (>auto> i = g1.cbegin(); i != g1.cend(); ++i)> >cout << *i <<>' '>;> > >cout <<>' Output of rbegin and rend: '>;> >for> (>auto> ir = g1.rbegin(); ir != g1.rend(); ++ir)> >cout << *ir <<>' '>;> > >cout <<>' Output of crbegin and crend : '>;> >for> (>auto> ir = g1.crbegin(); ir != g1.crend(); ++ir)> >cout << *ir <<>' '>;> > >return> 0;> }>

>

>

Wyjście

Output of begin and end: 1 2 3 4 5 Output of cbegin and cend: 1 2 3 4 5 Output of rbegin and rend: 5 4 3 2 1 Output of crbegin and crend : 5 4 3 2 1>

Pojemność

  1. rozmiar() – Zwraca liczbę elementów wektora.
  2. największy rozmiar() – Zwraca maksymalną liczbę elementów, jakie wektor może pomieścić.
  3. pojemność() – Zwraca wielkość przestrzeni dyskowej aktualnie przydzielonej do wektora wyrażoną jako liczba elementów.
  4. zmień rozmiar (n) – Zmienia rozmiar kontenera tak, aby zawierał „n” elementów.
  5. pusty() – Zwraca informację, czy kontener jest pusty.
  6. zmniejszyć_do_dopasowania() – Zmniejsza pojemność pojemnika dopasowując się do jego wymiarów oraz niszczy wszystkie elementy przekraczające jego pojemność.
  7. rezerwa() – Żąda, aby pojemność wektora była co najmniej wystarczająca do zawarcia n elementów.

C++




// C++ program to illustrate the> // capacity function in vector> #include> #include> > using> namespace> std;> > int> main()> {> >vector<>int>>g1;> > >for> (>int> i = 1; i <= 5; i++)> >g1.push_back(i);> > >cout <<>'Size : '> << g1.size();> >cout <<>' Capacity : '> << g1.capacity();> >cout <<>' Max_Size : '> << g1.max_size();> > >// resizes the vector size to 4> >g1.resize(4);> > >// prints the vector size after resize()> >cout <<>' Size : '> << g1.size();> > >// checks if the vector is empty or not> >if> (g1.empty() ==>false>)> >cout <<>' Vector is not empty'>;> >else> >cout <<>' Vector is empty'>;> > >// Shrinks the vector> >g1.shrink_to_fit();> >cout <<>' Vector elements are: '>;> >for> (>auto> it = g1.begin(); it != g1.end(); it++)> >cout << *it <<>' '>;> > >return> 0;> }>

>

Klawiatura w dół
>

Wyjście

Size : 5 Capacity : 8 Max_Size : 4611686018427387903 Size : 4 Vector is not empty Vector elements are: 1 2 3 4>

Dostęp do elementu

  1. operator odniesienia [g] – Zwraca referencję do elementu znajdującego się w pozycji „g” wektora
  2. w (g) – Zwraca referencję do elementu znajdującego się w pozycji „g” wektora
  3. przód() – Zwraca referencję do pierwszego elementu wektora
  4. z powrotem() – Zwraca referencję do ostatniego elementu wektora
  5. C++




    // C++ program to illustrate the> // element access in vector> #include> using> namespace> std;> > int> main()> {> >vector<>int>>g1;> > >for> (>int> i = 1; i <= 10; i++)> >g1.push_back(i * 10);> > >cout <<>' Reference operator [g] : g1[2] = '> << g1[2];> > >cout <<>' at : g1.at(4) = '> << g1.at(4);> > >cout <<>' front() : g1.front() = '> << g1.front();> > >cout <<>' back() : g1.back() = '> << g1.back();> > >// pointer to the first element> >int>* pos = g1.data();> > >cout <<>' The first element is '> << *pos;> >return> 0;> }>

    >

    >

    Wyjście

    Reference operator [g] : g1[2] = 30 at : g1.at(4) = 50 front() : g1.front() = 10 back() : g1.back() = 100 The first element is 10>

    Modyfikatory

    1. przydzielać() – Przypisuje nową wartość elementom wektorowym zastępując stare
    2. push_back() – Wpycha elementy do wektora od tyłu
    3. pop_back() – Służy do wyskakiwania lub usuwania elementów wektora z tyłu.
    4. wstawić() – Wstawia nowe elementy przed elementem w określonej pozycji
    5. usuwać() – Służy do usuwania elementów z kontenera z określonej pozycji lub zakresu.
    6. zamieniać() – Służy do zamiany zawartości jednego wektora na inny wektor tego samego typu. Rozmiary mogą się różnić.
    7. jasne() – Służy do usuwania wszystkich elementów kontenera wektorowego
    8. miejsce() – Rozbudowuje kontener poprzez wstawienie nowego elementu na miejsce
    9. miejsce_powrót() – Służy do wstawienia nowego elementu do kontenera wektorów, nowy element jest dodawany na końcu wektora

    C++




    // C++ program to illustrate the> // Modifiers in vector> #include> #include> using> namespace> std;> > int> main()> {> >// Assign vector> >vector<>int>>W;> > >// fill the vector with 10 five times> >v.assign(5, 10);> > >cout <<>'The vector elements are: '>;> >for> (>int> i = 0; i cout << v[i] << ' '; // inserts 15 to the last position v.push_back(15); int n = v.size(); cout << ' The last element is: ' << v[n - 1]; // removes last element v.pop_back(); // prints the vector cout << ' The vector elements are: '; for (int i = 0; i cout << v[i] << ' '; // inserts 5 at the beginning v.insert(v.begin(), 5); cout << ' The first element is: ' << v[0]; // removes the first element v.erase(v.begin()); cout << ' The first element is: ' << v[0]; // inserts at the beginning v.emplace(v.begin(), 5); cout << ' The first element is: ' << v[0]; // Inserts 20 at the end v.emplace_back(20); n = v.size(); cout << ' The last element is: ' << v[n - 1]; // erases the vector v.clear(); cout << ' Vector size after clear(): ' << v.size(); // two vector to perform swap vector v1, v2; v1.push_back(1); v1.push_back(2); v2.push_back(3); v2.push_back(4); cout<< ' Vector 1: '; for (int i = 0; i cout << v1[i] << ' '; cout << ' Vector 2: '; for (int i = 0; i cout << v2[i] << ' '; // Swaps v1 and v2 v1.swap(v2); cout << ' After Swap Vector 1: '; for (int i = 0; i cout << v1[i] << ' '; cout << ' Vector 2: '; for (int i = 0; i cout << v2[i] << ' '; }>

    >

    sen javascript
    >

    Wyjście

    The vector elements are: 10 10 10 10 10 The last element is: 15 The vector elements are: 10 10 10 10 10 The first element is: 5 The first element is: 10 The first element is: 5 The last element is: 20 Vector size after erase(): 0 Vector 1: 1 2 Vector 2: 3 4 After Swap Vector 1: 3 4 Vector 2: 1 2>

    Złożoność czasowa wykonywania różnych operacji na wektorach wynosi:

    • Dostęp losowy – stała O(1)
    • Wstawienie lub usunięcie elementów na końcu – stała O(1)
    • Wstawianie lub usuwanie elementów – liniowe w odległości do końca wektora O(N)
    • Znając wielkość – stała O(1)
    • Zmiana rozmiaru wektora — Liniowy O(N)

    Wszystkie funkcje członkowskie std::vector

    Poniżej znajduje się lista wszystkich funkcji składowych klasy std::vector w C++:

    Funkcja wektorowa

    Opis

    push_back()

    Dodaje element na końcu wektora.

    pop_back()

    Usuwa ostatni element wektora.

    rozmiar()

    Zwraca liczbę elementów wektora.

    największy rozmiar()

    Zwraca maksymalną liczbę elementów, jakie może pomieścić wektor.

    Zmień rozmiar()

    Zmienia rozmiar wektora.

    pusty()

    Sprawdza, czy wektor jest pusty.

    operator[]

    Dostęp do elementu w określonej pozycji.

    Na()

    Uzyskuje dostęp do elementu w określonej pozycji, sprawdzając granice.

    przód()

    Dostęp do pierwszego elementu wektora.

    z powrotem()

    Dostęp do ostatniego elementu wektora.

    zaczynać()

    Zwraca iterator wskazujący na pierwszy element wektora.

    koniec()

    Zwraca iterator wskazujący element końcowy wektora.

    rzacznij()

    Zwraca iterator odwrotny wskazujący na ostatni element wektora.

    renderowanie()

    Zwraca iterator odwrotny wskazujący element poprzedzający pierwszy element wektora.

    czacznij

    Zwraca const_iterator na początek

    kilka

    Zwraca const_iterator do końca

    zacznij

    Zwraca const_reverse_iterator do odwrotnego początku

    uważać

    Zwraca const_reverse_iterator do odwrotnego końca

    wstawić()

    Java otwiera plik
    Wstawia elementy w określonym miejscu wektora.

    usuwać()

    Usuwa elementy z określonej pozycji lub zakresu wektora.

    zamieniać()

    Zamienia zawartość wektora z zawartością innego wektora.

    jasne()

    Usuwa wszystkie elementy z wektora.

    miejsce()

    Konstruuje i wstawia element do wektora.

    miejsce_powrót()

    Konstruuje i wstawia element na końcu wektora.

    przydzielać()

    Przypisuje nowe wartości do elementów wektorowych zastępując stare.

    pojemność()

    Zwraca rozmiar przestrzeni dyskowej aktualnie przydzielonej do wektora.

    rezerwa()

    Żąda, aby pojemność wektora była co najmniej wystarczająca do zawarcia określonej liczby elementów.

    zmniejszyć_do_dopasowania()

    Zmniejsza zużycie pamięci, zwalniając nieużywane miejsce.

    get_allocator

    Zwraca kopię obiektu alokatora powiązanego z wektorem.

    Musisz przeczytać:

    • Jak sprawdzić, czy wektor zawiera dany element w C++?
    • Jak znaleźć indeks danego elementu w wektorze w C++
    • Sortowanie wektorów w C++