logo

Vektor v C++ STL

Vektory jsou stejné jako dynamická pole s možností automatické změny velikosti, když je prvek vložen nebo odstraněn, s jejich ukládáním, které automaticky zpracovává kontejner. Vektorové prvky jsou umístěny v souvislém úložišti, takže k nim lze přistupovat a procházet je pomocí iterátorů. Ve vektorech se data vkládají na konec. Vkládání na konec trvá rozdílný čas, protože někdy může být nutné pole rozšířit. Odstranění posledního prvku trvá pouze konstantní čas, protože nedochází k žádné změně velikosti. Vkládání a mazání na začátku nebo uprostřed je v čase lineární.

Co je std::vector v C++?

std::vektor v C++ je šablona třídy, která obsahuje vektorový kontejner a jeho členské funkce. Je definován uvnitř hlavičkový soubor. Členské funkce třídy std::vector poskytují různé funkce vektorovým kontejnerům.



Syntaxe pro deklaraci vektoru v C++

  std::vector   vectorName;>

kde datový typ je typ dat každého prvku vektoru. Můžete odebrat std::, pokud jste již použili jmenný prostor std.

Inicializace Vector v C++

Vektor můžeme inicializovat následujícími způsoby:

1. Inicializace pomocí seznamu

Tato inicializace se provádí deklarací. Zde předáme seznam prvků konstruktoru vektoru, aby vytvořil vektor se zadanými prvky.



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

2. Inicializace S jedinou hodnotou

Tato inicializace se také provádí deklarací. Zde určíme velikost vektoru a poté inicializujeme každý prvek vektoru hodnotou.

  vector   name(size, value);>

3. Inicializace z jiného vektoru

Tato inicializace se používá k vytvoření vektoru, který je přesnou kopií other_vec.

  vector   name(other_vec);>

Některé běžně používané členské funkce třídy std::vector jsou napsány níže:



Iterátory

  1. začít() – Vrátí iterátor ukazující na první prvek ve vektoru
  2. konec() – Vrátí iterátor ukazující na teoretický prvek, který následuje za posledním prvkem ve vektoru
  3. rbegin() – Vrátí zpětný iterátor ukazující na poslední prvek ve vektoru (obrácený začátek). Přesune se od posledního k prvnímu prvku
  4. poskytnout() – Vrátí zpětný iterátor ukazující na teoretický prvek předcházející prvnímu prvku ve vektoru (považovaný za obrácený konec)
  5. cbegin() – Vrátí konstantní iterátor ukazující na první prvek ve vektoru.
  6. trochu() – Vrátí konstantní iterátor ukazující na teoretický prvek, který následuje za posledním prvkem ve vektoru.
  7. crbegin() – Vrátí konstantní reverzní iterátor ukazující na poslední prvek ve vektoru (obrácený začátek). Přesune se od posledního k prvnímu prvku
  8. Crend() – Vrátí konstantní reverzní iterátor ukazující na teoretický prvek předcházející prvnímu prvku ve vektoru (považovaný za reverzní konec)

C++




// C++ program to illustrate the> // iterators in vector> #include> #include> > using> namespace> std;> > int> main()> {> >vector<>int>>gl;> > >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ýstup

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. velikost() – Vrátí počet prvků ve vektoru.
  2. max_size() – Vrátí maximální počet prvků, které vektor pojme.
  3. kapacita() – Vrátí velikost úložného prostoru aktuálně přiděleného vektoru vyjádřenou jako počet prvků.
  4. změnit velikost (n) – Změní velikost kontejneru tak, aby obsahoval „n“ prvků.
  5. prázdný() – Vrací, zda je nádoba prázdná.
  6. shrink_to_fit() – Snižuje kapacitu kontejneru tak, aby odpovídala jeho velikosti, a ničí všechny prvky nad rámec kapacity.
  7. rezervovat() – Požaduje, aby vektorová kapacita byla alespoň taková, aby obsahovala n prvků.

C++




// C++ program to illustrate the> // capacity function in vector> #include> #include> > using> namespace> std;> > int> main()> {> >vector<>int>>gl;> > >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;> }>

>

linuxové soubory
>

Výstup

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

Přístup k prvku

  1. referenční operátor [g] – Vrátí odkaz na prvek na pozici ‚g‘ ve vektoru
  2. v (g) – Vrátí odkaz na prvek na pozici ‚g‘ ve vektoru
  3. přední() – Vrátí odkaz na první prvek ve vektoru
  4. zadní() – Vrátí odkaz na poslední prvek ve vektoru
  5. C++

    c++ rozdělený řetězec




    // C++ program to illustrate the> // element access in vector> #include> using> namespace> std;> > int> main()> {> >vector<>int>>gl;> > >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ýstup

    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. přiřadit() – Přiřazuje vektorovým prvkům novou hodnotu nahrazením starých
    2. zatlačit zpátky() – Zatlačí prvky do vektoru zezadu
    3. pop_back() – Používá se k vyjmutí nebo odstranění prvků z vektoru ze zadní strany.
    4. vložit() – Vloží nové prvky před prvek na zadanou pozici
    5. vymazat() – Používá se k odstranění prvků z kontejneru ze zadané pozice nebo rozsahu.
    6. swap() – Používá se k záměně obsahu jednoho vektoru za jiný vektor stejného typu. Velikosti se mohou lišit.
    7. Průhledná() – Používá se k odstranění všech prvků vektorového kontejneru
    8. umístit() – Prodlužuje kontejner vložením nového prvku na místo
    9. emplace_back() – Slouží k vložení nového prvku do kontejneru vektoru, nový prvek se přidá na konec vektoru

    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 vl, 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ýstup

    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á složitost provádění různých operací s vektory je -

    • Náhodný přístup – konstantní O(1)
    • Vkládání nebo odebírání prvků na konci – konstanta O(1)
    • Vkládání nebo odebírání prvků – lineární ve vzdálenosti ke konci vektoru O(N)
    • Znát velikost – konstanta O(1)
    • Změna velikosti vektoru- Lineární O(N)

    Všechny členské funkce std::vector

    Následuje seznam všech členských funkcí třídy std::vector v C++:

    Vector Funkce

    Popis

    zatlačit zpátky()

    Přidá prvek na konec vektoru.

    pop_back()

    Odebere poslední prvek vektoru.

    velikost()

    Vrátí počet prvků ve vektoru.

    max_size()

    Vrátí maximální počet prvků, které vektor pojme.

    změnit velikost ()

    Změní velikost vektoru.

    prázdný()

    Zkontroluje, zda je vektor prázdný.

    operátor[]

    Přistupuje k prvku na určité pozici.

    na()

    Přistupuje k prvku na určité pozici s kontrolou hranic.

    přední()

    Přistupuje k prvnímu prvku vektoru.

    zadní()

    Přistupuje k poslednímu prvku vektoru.

    začít()

    Vrátí iterátor ukazující na první prvek vektoru.

    konec()

    Vrátí iterátor ukazující na prvek vektoru za koncem.

    rbegin()

    Vrátí zpětný iterátor ukazující na poslední prvek vektoru.

    poskytnout()

    Vrátí zpětný iterátor ukazující na prvek předcházející prvnímu prvku vektoru.

    cbegin

    Vrátí const_iterator na začátek

    trochu

    Vrátí const_iterator na konec

    crbegin

    Vrátí const_reverse_iterator na obrácený začátek

    věřit

    slovník c#
    Vrátí const_reverse_iterator na opačný konec

    vložit()

    Vloží prvky na určité místo ve vektoru.

    vymazat()

    Odebere prvky z konkrétní pozice nebo rozsahu ve vektoru.

    swap()

    Zamění obsah vektoru s obsahem jiného vektoru.

    Průhledná()

    Odebere všechny prvky z vektoru.

    umístit()

    Vytvoří a vloží prvek do vektoru.

    emplace_back()

    Vytvoří a vloží prvek na konec vektoru.

    přiřadit()

    Přiřadí prvky vektoru nové hodnoty nahrazením starých.

    kapacita()

    Vrátí velikost úložného prostoru aktuálně přiděleného vektoru.

    rezervovat()

    Požaduje, aby vektorová kapacita byla alespoň taková, aby obsahovala zadaný počet prvků.

    shrink_to_fit()

    Snižuje využití paměti uvolněním nevyužitého místa.

    get_allocator

    Vrátí kopii objektu alokátoru spojeného s vektorem.

    Musíš číst:

    • Jak zkontrolovat, zda vektor obsahuje daný prvek v C++?
    • Jak najít index daného prvku ve Vectoru v C++
    • Třídění vektoru v C++