std::vector
Definováno v <vector>
|
||
template< class T, |
||
std::vector
je sekvenční kontejner zapouzdřující dynamické pole (pole s proměnným počtem prvků).
Prvky vektoru jsou v paměti uloženy souvisle, jeden za druhým. Krom iterátoru může být k prvku přistupováno i užitím obyčejného ukazatele s offsetem. Ukazatel na prvek vektoru lze předat kterékoli funkci, která očekává ukazatel na prvek pole.
Paměť vektoru je spravována automaticky, je zvětšována či zmenšována dle potřeby. Vektor zpravidla zabírá více paměti než obyčejné statické pole - je alokováno více paměti najednou pro budoucí růst. Vektor proto nemusí realokovat paměť kvůli každému jednotlivému vkládanému prvku, ale teprve tehdy když je dodatečné místo vyčerpáno. Celkové množství alokované paměti lze zjistit členskou funkcí capacity(). Nevyužitá nadbytečná paměť může být uvolněna voláním členské funkce shrink_to_fit().(počínaje C++11)
Realokace paměti je z hlediska výpočetního výkonu celkem nákladnou operací. Vektor proto umožňuje rezervovat místo pro prvky dopředu pomocí členské funkce reserve(). Je-li předem známa horní mez počtu prvků vektoru, lze realokace zcela eliminovat.
Asymptotická časová složitost běžných operací s vektorem je následující:
- Náhodný přístup k prvkům vektoru - konstantní O(1)
- Přidání nebo odebrání prvků na konci vektoru - amortizovaně konstantní O(1)
- Vložení nebo vyjmutí prvků v těle vektoru - lineární v závislosti na vzdálenosti od konce vektoru O(n)
std::vector
splňuje požadavky konceptů Container
, AllocatorAwareContainer
, SequenceContainer
a ReversibleContainer
.
Obsah |
[editovat] Parametry šablony
T | - | Typ prvků.
| ||||
Allocator | - | Alokátor, který má být užíván ke správě paměti pro prvky. Typ alokátoru musí splňovat požadavky konceptu Allocator .
|
[editovat] Specializace
Standardní knihovna poskytuje specializaci šablony std::vector
pro typ bool. Tato specializace je optimalizována pro nižší spotřebu paměti.
prostorově úsporný dynamický bitset (Specializace šablony třídy) |
[editovat] Členské typy
Členský typ | Definice |
value_type
|
T
|
allocator_type
|
Allocator
|
size_type
|
Celočíselný typ bez znaménka (zpravidla std::size_t) |
difference_type
|
Celočíselný typ se znaménkem (zpravidla std::ptrdiff_t) |
reference
|
Allocator::reference (před C++11)value_type& (počínaje C++11)
|
const_reference
|
Allocator::const_reference (před C++11)const value_type& (počínaje C++11)
|
pointer
|
Allocator::pointer (před C++11)std::allocator_traits<Allocator>::pointer (počínaje C++11) |
const_pointer
|
Allocator::const_pointer (před C++11) std::allocator_traits<Allocator>::const_pointer (počínaje C++11) |
iterator
|
RandomAccessIterator
|
const_iterator
|
Konstantní iterátor s náhodným přístupem |
reverse_iterator
|
std::reverse_iterator<iterator> |
const_reverse_iterator
|
std::reverse_iterator<const_iterator> |
[editovat] Členské funkce
zkonstruuje vector (veřejná členská funkce) | |
destruuje vector (veřejná členská funkce) | |
provede přiřazení obsahu kontejneru (veřejná členská funkce) | |
provede přiřazení obsahu kontejneru (veřejná členská funkce) | |
vrátí přidružený alokátor (veřejná členská funkce) | |
Přístup k prvkům | |
zpřístupní prvek na zadané pozici s kontrolou překročení mezí (veřejná členská funkce) | |
zpřístupní prvek na zadané pozici (veřejná členská funkce) | |
zpřístupní první prvek (veřejná členská funkce) | |
zpřístupní poslední prvek (veřejná členská funkce) | |
(C++11) |
přímý přístup k vnitřnímu poli (veřejná členská funkce) |
Iterátory | |
vrátí iterátor pro první prvek (veřejná členská funkce) | |
vrátí iterátor pro poslední prvek (veřejná členská funkce) | |
vrátí reverzní iterátor pro první prvek (veřejná členská funkce) | |
vrátí reverzní iterátor pro poslední prvek (veřejná členská funkce) | |
Kapacita | |
zjistí zda-li je kontejner prázdný (veřejná členská funkce) | |
zjistí počet prvků (veřejná členská funkce) | |
vrátí maximální možný počet prvků (veřejná členská funkce) | |
rezervuje paměť pro prvky (veřejná členská funkce) | |
vrátí počet prvků, kolik se vejde do současného alokovaného místa (veřejná členská funkce) | |
(C++11) |
požádá o uvolnění nevyužité paměti (veřejná členská funkce) |
Změna obsahu | |
vyprázdní kontejner (veřejná členská funkce) | |
vloží prvky (veřejná členská funkce) | |
(C++11) |
vloží, konstruuje prvek přímo v místě vložení (veřejná členská funkce) |
odstraní prvky (veřejná členská funkce) | |
přidá prvek na konec (veřejná členská funkce) | |
(C++11) |
přidá, konstruuje prvek přímo na konci vektoru (veřejná členská funkce) |
odstraní poslední prvek (veřejná členská funkce) | |
přenastaví počet prvků (veřejná členská funkce) | |
prohodí obsahy (veřejná členská funkce) |
[editovat] Nečlenské funkce
porovná dvojici kontejnerů vector lexikografickým porovnáním prvků (šablona funkce) | |
specializace algoritmu std::swap (šablona funkce) |