Przestrzenie nazw
Warianty
Działania

std::vector

Z cppreference.com
< cpp‎ | container


Zdefiniowane w nagłówku <vector>
template<

    class T,
    class Allocator = std::allocator<T>

> class vector;
(1)

std::vector jest kontenerem sekwencyjnym, który enkapsuluje tablice zmiennej wielkości.

Elementy są przechowywane w ciągłej pamięci, co oznacza, że można do nich uzyskać dostęp nie tylko przez iteratory, ale również przesuwając zwykłe wskaźniki na elementy. Dzięki temu wskaźnik na element wektora można przekazać do funkcji oczekującej wskaźnika na element tablicy. (od C++03)

Pojemność wektora jest zarządzana automatycznie, zwiększana bądź zmniejszana w razie potrzeby. Wektory zużywają zwykle więcej pamięci niż tablice, ponieważ "na zapas" alokują więcej pamięci, która jest później używana w przypadku zwiększenia liczby elementów. W ten sposób wektor nie musi realokować całej swojej pamięci za każdym razem, gdy dodawany jest do niego element, ale dopiero gdy zapasowa pamięć się wyczerpie. Całkowitą ilość zarezerwowanej pamięci można odczytać poprzez funkcję capacity(). Nadmiarowa pamięć może zostać zwrócona do systemu poprzez wywołanie shrink_to_fit(). (od C++11)

Realokacje są kosztownymi operacjami pod względem wydajności. Jeśli liczba elementów jest znana zawczasu, można wykorzystać funkcję reserve(), aby wyeliminować realokacje i od razu zarezerwować wymaganą ilość pamięci.

Złożoność obliczeniowa (wydajność) standardowych operacji na wektorze jest następująca:

  • Dostęp bezpośredni do elementu - stała O(1)
  • Wstawienie lub usunięcie elementu na końcu - amortyzowana stała O(1)
  • Wstawienie lub usunięcie elementu - liniowa względem odległości do końca wektora O(n)

std::vector spełnia wymagania Container, AllocatorAwareContainer, SequenceContainer i ReversibleContainer.

Spis treści

[edytuj] Parametry szablonu

T - Typ elementów.
T musi spełniać wymagania CopyAssignable i CopyConstructible. (do C++11)
Wymagania nałożone na elementy zależą od rzeczywiście wykonywanych na kontenerze operacji. Z reguły jest wymagane, aby typ elementu był typem kompletnym i spełniał wymagania Erasable, lecz wiele metod nakłada bardziej rygorystyczne warunki. (od C++11)

[edit]

Allocator - Alokator wykorzystywany do uzyskiwania/zwalniania pamięci i tworzenia/niszczenia elementów w tej pamięci. Typ musi spełniać wymogi Allocator. Zachowanie jest niezdefiniowane, jeśli Allocator::value_type nie jest identyczny jak T. [edit]

[edytuj] Specjalizacje

Biblioteka standardowa zapewnia specjalizację std::vector dla typu bool, która może być zoptymalizowana pod kątem wydajności pamięciowej.

pamięciowo wydajny, dynamiczny bitset
(specjalizacja szablonu klasy) [edit]

[edytuj] Unieważnienie iteratorów

Operacja Unieważnia
Operacje odczytu, swap, std::swap Nigdy
clear, operator=, assign Zawsze
reserve, shrink_to_fit Jeśli wektor zmienił pojemność, wszystkie. Jeśli nie, żadne.
erase Usunięte elementy + wszystkie elementy występujące po nich (włączając end())
push_back, emplace_back Jeśli wektor zmienił pojemność, wszystkie. Jeśli nie, tylko end().
insert, emplace, resize Jeśli wektor zmienił pojemność, wszystkie. Jeśli nie, tylko te za miejscem wstawienia.
pop_back Element usunięty i end().

[edytuj] Typy składowe

Typ składowy Definicja
value_type T [edit]
allocator_type Allocator [edit]
size_type Typ całkowitoliczbowy bez znaku (zwykle std::size_t) [edit]
difference_type Typ całkowitoliczbowy ze znakiem (zwykle std::ptrdiff_t) [edit]
reference
Allocator::reference (do C++11)
value_type& (od C++11)
[edit]
const_reference
Allocator::const_reference (do C++11)
const value_type& (od C++11)
[edit]
pointer
Allocator::pointer (do C++11)
std::allocator_traits<Allocator>::pointer (od C++11)
[edit]
const_pointer
Allocator::const_pointer (do C++11)
std::allocator_traits<Allocator>::const_pointer (od C++11)
[edit]
iterator RandomAccessIterator [edit]
const_iterator Constant RandomAccessIterator [edit]
reverse_iterator std::reverse_iterator<iterator> [edit]
const_reverse_iterator std::reverse_iterator<const_iterator> [edit]

[edytuj] Metody

Konstruuje vector
(publiczna metoda) [edit]
Niszczy vector
(publiczna metoda) [edit]
przypisuje wartości do kontenera
(publiczna metoda) [edit]
przypisuje wartości do kontenera
(publiczna metoda) [edit]
zwraca skojarzony alokator
(publiczna metoda) [edit]
Dostęp do elementów
dostęp do wskazanego elementu, ze sprawdzeniem zakresów
(publiczna metoda) [edit]
dostęp do wskazanego elementu
(publiczna metoda) [edit]
dostęp do pierwszego elementu
(publiczna metoda) [edit]
dostęp do ostatniego elementu
(publiczna metoda) [edit]
(C++11)
bezpośredni dostęp do tablicy opakowywanej przez kontener
(publiczna metoda) [edit]
Iteratory
zwraca iterator na początek kontenera
(publiczna metoda) [edit]
zwraca iterator za koniec kontenera
(publiczna metoda) [edit]
zwraca odwrócony iterator na początek
(publiczna metoda) [edit]
zwraca odwrócony iterator za koniec kontenera
(publiczna metoda) [edit]
Pojemność
sprawdza, czy kontener jest pusty
(publiczna metoda) [edit]
zwraca liczbę elementów
(publiczna metoda) [edit]
zwraca maksymalną możliwą liczbę elementów
(publiczna metoda) [edit]
rezerwuje pamięć
(publiczna metoda) [edit]
zwraca liczbę elementów, które mogą być przechowane w obecnie zarezerwowanej pamięci
(publiczna metoda) [edit]
zmniejsza zużycie pamięci poprzez zwolnienie nieużywanej pamięci
(publiczna metoda) [edit]
Modyfikatory
czyści zawartość
(publiczna metoda) [edit]
wstawia elementy
(publiczna metoda) [edit]
(C++11)
konstruuje element "w miejscu"
(publiczna metoda) [edit]
usuwa elementy
(publiczna metoda) [edit]
dodaje element na koniec
(publiczna metoda) [edit]
konstruuje element "w miejscu" na końcu
(publiczna metoda) [edit]
usuwa ostatni element
(publiczna metoda) [edit]
zmienia liczbę przechowywanych elementów
(publiczna metoda) [edit]
zamienia zawartość
(publiczna metoda) [edit]

[edytuj] Funkcje operujące na zawartości

leksykograficznie porównuje wartości w vector
(szablon funkcji) [edit]
specjalizacja dla algorytmu std::swap
(szablon funkcji) [edit]

[edytuj] Przykład

#include <iostream>
#include <vector>
 
int main()
{
    // Tworzy wektor zawierający liczby całkowite
    std::vector<int> v = {7, 5, 16, 8};
 
    // Dodaje dwie liczby do wektora
    v.push_back(25);
    v.push_back(13);
 
    // Iteruje po wartościach w wektorze i wypisuje je
    for(int n : v) {
        std::cout << n << '\n';
    }
}

Wynik:

7
5
16
8
25
13