Vektory sú rovnaké ako dynamické polia s možnosťou automatickej zmeny veľkosti, keď je prvok vložený alebo odstránený, pričom ich ukladanie automaticky spracováva kontajner. Vektorové prvky sú umiestnené v súvislom úložisku, takže k nim možno pristupovať a prechádzať pomocou iterátorov. Vo vektoroch sa údaje vkladajú na koniec. Vkladanie na konci trvá rozdielny čas, pretože niekedy môže byť potrebné pole rozšíriť. Odstránenie posledného prvku trvá iba konštantný čas, pretože nedochádza k žiadnej zmene veľkosti. Vkladanie a mazanie na začiatku alebo v strede je v čase lineárne.
Čo je std::vector v C++?
std::vektor v C++ je šablóna triedy, ktorá obsahuje vektorový kontajner a jeho členské funkcie. Je definovaný vo vnútri hlavičkový súbor. Členské funkcie triedy std::vector poskytujú vektorovým kontajnerom rôzne funkcie.
Syntax na deklarovanie vektora v C++
std::vector vectorName;>
kde typ údajov je typ údajov každého prvku vektora. Môžete odstrániť std::, ak ste už použili menný priestor std.
Inicializácia Vector v C++
Vektor môžeme inicializovať nasledujúcimi spôsobmi:
1. Inicializácia pomocou zoznamu
Táto inicializácia sa vykonáva deklaráciou. Tu odovzdáme zoznam prvkov vektorovému konštruktorovi, aby vytvoril vektor so zadanými prvkami.
vector name({ value1, value2, value3 .... });>
2. Inicializácia S jedinou hodnotou
Táto inicializácia sa vykonáva aj deklaráciou. Tu zadáme veľkosť vektora a potom inicializujeme každý prvok vektora s hodnotou.
vector name(size, value);>
3. Inicializácia z iného vektora
Táto inicializácia sa používa na vytvorenie vektora, ktorý je presnou kópiou other_vec.
vector name(other_vec);>
Niektoré bežne používané členské funkcie triedy std::vector sú napísané nižšie:
Iterátory
- začať() – Vráti iterátor ukazujúci na prvý prvok vo vektore
- koniec() – Vráti iterátor ukazujúci na teoretický prvok, ktorý nasleduje za posledným prvkom vo vektore
- rbegin() – Vráti spätný iterátor ukazujúci na posledný prvok vo vektore (obrátený začiatok). Prechádza od posledného k prvému prvku
- render() – Vráti spätný iterátor ukazujúci na teoretický prvok predchádzajúci prvému prvku vo vektore (považovaný za opačný koniec)
- cbegin() – Vráti konštantný iterátor ukazujúci na prvý prvok vo vektore.
- zopár() – Vráti konštantný iterátor ukazujúci na teoretický prvok, ktorý nasleduje za posledným prvkom vo vektore.
- crbegin() – Vráti konštantný reverzný iterátor ukazujúci na posledný prvok vo vektore (obrátený začiatok). Prechádza od posledného k prvému prvku
- vyznanie () – Vráti konštantný reverzný iterátor ukazujúci na teoretický prvok predchádzajúci prvému prvku vo vektore (považovaný za opačný 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;> }> |
>
>Výkon
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>
Kapacita
- veľkosť () – Vráti počet prvkov vo vektore.
- max_size() – Vráti maximálny počet prvkov, ktoré môže vektor obsahovať.
- kapacita() – Vráti veľkosť úložného priestoru aktuálne prideleného vektoru vyjadrenú ako počet prvkov.
- zmeniť veľkosť (n) – Zmení veľkosť kontajnera tak, aby obsahoval „n“ prvkov.
- prázdne () – Vráti, či je nádoba prázdna.
- zmenšiť, aby sa zmestili() – Znižuje kapacitu nádoby tak, aby sa prispôsobila jej veľkosti a ničí všetky prvky nad rámec kapacity.
- rezerva() – Požaduje, aby vektorová kapacita bola aspoň dostatočná na to, aby obsahovala n prvkov.
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;> }> |
>
formátovať reťazec java
>Výkon
Size : 5 Capacity : 8 Max_Size : 4611686018427387903 Size : 4 Vector is not empty Vector elements are: 1 2 3 4>
Prístup k prvku
- referenčný operátor [g] – Vráti odkaz na prvok na pozícii „g“ vo vektore
- v (g) – Vráti odkaz na prvok na pozícii „g“ vo vektore
- predné () – Vráti odkaz na prvý prvok vo vektore
- späť() – Vráti odkaz na posledný prvok vo vektore
- 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;>
}>
>
v regexe java
>
VýkonReference operator [g] : g1[2] = 30 at : g1.at(4) = 50 front() : g1.front() = 10 back() : g1.back() = 100 The first element is 10>
Modifikátory
- priradiť() – Priraďuje vektorovým prvkom novú hodnotu nahradením starých
- push_back() – Vtláča prvky do vektora zozadu
- pop_back() – Používa sa na vysunutie alebo odstránenie prvkov z vektora zo zadnej strany.
- vložiť() – Vloží nové prvky pred prvok na zadanú pozíciu
- vymazať() – Používa sa na odstránenie prvkov z kontajnera z určenej polohy alebo rozsahu.
- vymeniť () – Používa sa na výmenu obsahu jedného vektora za iný vektor rovnakého typu. Veľkosti sa môžu líšiť.
- jasný() – Používa sa na odstránenie všetkých prvkov vektorového kontajnera
- umiestniť() – Predĺži nádobu vložením nového prvku na miesto
- emplace_back() – Používa sa na vloženie nového prvku do kontajnera vektora, nový prvok sa pridá na koniec vektora
C++
// C++ program to illustrate the>
// Modifiers in vector>
#include>
#include>
using>
namespace>
std;>
>
int>
main()>
{>
>
// Assign vector>
>
vector<>
int>
>v;>
>
>
// 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] << ' '; }> >
>
VýkonThe 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>
Časová zložitosť vykonávania rôznych operácií s vektormi je
- Náhodný prístup – konštantný O(1)
- Vkladanie alebo vyberanie prvkov na konci – konštanta O(1)
- Vkladanie alebo odstraňovanie prvkov – lineárne vo vzdialenosti ku koncu vektora O(N)
- Poznanie veľkosti – konštanta O(1)
- Zmena veľkosti vektora- Lineárne O(N)
Všetky členské funkcie std::vector
Nasleduje zoznam všetkých členských funkcií triedy std::vector v C++:
Funkcia vektora
Popis
Pridá prvok na koniec vektora. Odstráni posledný prvok vektora. Vráti počet prvkov vo vektore. max_size()
Vráti maximálny počet prvkov, ktoré môže vektor obsahovať. zmeniť veľkosť ()
Zmení veľkosť vektora. Skontroluje, či je vektor prázdny. operátor[]
Pristupuje k prvku na určitej pozícii. v ()
Pristupuje k prvku na špecifickej pozícii s kontrolou hraníc. predné ()
Pristupuje k prvému prvku vektora. späť()
Pristupuje k poslednému prvku vektora. začať()
algoritmus kmp
Vráti iterátor ukazujúci na prvý prvok vektora. koniec()
Vráti iterátor ukazujúci na posledný prvok vektora. rbegin()
Vráti spätný iterátor ukazujúci na posledný prvok vektora. render()
Vráti spätný iterátor ukazujúci na prvok predchádzajúci prvému prvku vektora. cbegin
Vráti const_iterator na začiatok zopár
Vráti const_iterator na koniec crbegin
Vráti const_reverse_iterator na opačný začiatok veriť
Vráti const_reverse_iterator na opačný koniec Vloží prvky na konkrétne miesto vo vektore. Odstráni prvky z určitej pozície alebo rozsahu vo vektore. vymeniť ()
Zamení obsah vektora s obsahom iného vektora. Odstráni všetky prvky z vektora. umiestniť()
Zostrojí a vloží prvok do vektora. emplace_back()
Zostrojí a vloží prvok na koniec vektora. priradiť()
Priradí nové hodnoty vektorovým prvkom nahradením starých. kapacita()
Vráti veľkosť úložného priestoru aktuálne prideleného vektoru. rezerva()
Požaduje, aby vektorová kapacita bola aspoň dostatočná na to, aby obsahovala určený počet prvkov. zmenšiť, aby sa zmestili()
Znižuje využitie pamäte uvoľnením nevyužitého miesta. get_allocator
Vráti kópiu objektu alokátora priradeného k vektoru. Musíte prečítať:
- Ako skontrolovať, či vektor obsahuje daný prvok v C++?
- Ako nájsť index daného prvku vo vektore v C++
- Triedenie vektora v C++