logo

Vektor v C++ STL

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

  1. začať() – Vráti iterátor ukazujúci na prvý prvok vo vektore
  2. koniec() – Vráti iterátor ukazujúci na teoretický prvok, ktorý nasleduje za posledným prvkom vo vektore
  3. 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
  4. 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)
  5. cbegin() – Vráti konštantný iterátor ukazujúci na prvý prvok vo vektore.
  6. zopár() – Vráti konštantný iterátor ukazujúci na teoretický prvok, ktorý nasleduje za posledným prvkom vo vektore.
  7. 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
  8. 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

  1. veľkosť () – Vráti počet prvkov vo vektore.
  2. max_size() – Vráti maximálny počet prvkov, ktoré môže vektor obsahovať.
  3. kapacita() – Vráti veľkosť úložného priestoru aktuálne prideleného vektoru vyjadrenú ako počet prvkov.
  4. zmeniť veľkosť (n) – Zmení veľkosť kontajnera tak, aby obsahoval „n“ prvkov.
  5. prázdne () – Vráti, či je nádoba prázdna.
  6. 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.
  7. 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

  1. referenčný operátor [g] – Vráti odkaz na prvok na pozícii „g“ vo vektore
  2. v (g) – Vráti odkaz na prvok na pozícii „g“ vo vektore
  3. predné () – Vráti odkaz na prvý prvok vo vektore
  4. späť() – Vráti odkaz na posledný prvok vo vektore
  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;> }>

    >

    v regexe java

    >

    Výkon

    Reference 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

    1. priradiť() – Priraďuje vektorovým prvkom novú hodnotu nahradením starých
    2. push_back() – Vtláča prvky do vektora zozadu
    3. pop_back() – Používa sa na vysunutie alebo odstránenie prvkov z vektora zo zadnej strany.
    4. vložiť() – Vloží nové prvky pred prvok na zadanú pozíciu
    5. vymazať() – Používa sa na odstránenie prvkov z kontajnera z určenej polohy alebo rozsahu.
    6. vymeniť () – Používa sa na výmenu obsahu jedného vektora za iný vektor rovnakého typu. Veľkosti sa môžu líšiť.
    7. jasný() – Používa sa na odstránenie všetkých prvkov vektorového kontajnera
    8. umiestniť() – Predĺži nádobu vložením nového prvku na miesto
    9. 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ýkon

    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>

    Č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

    push_back()

    Pridá prvok na koniec vektora.

    pop_back()

    Odstráni posledný prvok vektora.

    veľkosť ()

    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.

    prázdne ()

    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žiť()

    Vloží prvky na konkrétne miesto vo vektore.

    vymazať()

    Odstráni prvky z určitej pozície alebo rozsahu vo vektore.

    vymeniť ()

    Zamení obsah vektora s obsahom iného vektora.

    jasný()

    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++