logo

Vector en C++ STL

Els vectors són els mateixos que les matrius dinàmiques amb la possibilitat de redimensionar-se automàticament quan s'insereix o s'elimina un element, i el contenidor gestiona el seu emmagatzematge automàticament. Els elements vectorials es col·loquen en un emmagatzematge contigu perquè es pugui accedir i recórrer mitjançant iteradors. En vectors, les dades s'insereixen al final. La inserció al final requereix un temps diferencial, ja que de vegades pot ser que calgui ampliar la matriu. L'eliminació de l'últim element només requereix un temps constant perquè no es produeix cap canvi de mida. Inserir i esborrar al principi o al mig és lineal en el temps.

Què és std::vector en C++?

std::vector en C++ és la plantilla de classe que conté el contenidor vectorial i les seves funcions membres. Es defineix dins del fitxer de capçalera. Les funcions membres de la classe std::vector proporcionen diverses funcionalitats als contenidors vectorials.



Sintaxi per declarar vector en C++

  std::vector   vectorName;>

on el tipus de dades és el tipus de dades de cada element del vector. Podeu eliminar l'estd:: si ja heu utilitzat l'espai de noms std.

Inicialització de Vector en C++

Podem inicialitzar un vector de les següents maneres:

1. Inicialització mitjançant la llista

Aquesta inicialització es fa amb una declaració. Aquí, passem la llista d'elements al constructor de vectors per crear un vector amb els elements especificats.



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

2. Inicialització Amb un únic valor

Aquesta inicialització també es fa amb declaració. Aquí, especifiquem la mida del vector i després inicialitzem tots els elements del vector amb el valor.

  vector   name(size, value);>

3. Inicialització des d'un altre vector

Aquesta inicialització s'utilitza per crear un vector que és una còpia exacta de other_vec.

  vector   name(other_vec);>

A continuació s'escriuen algunes de les funcions membres de la classe std::vector que s'utilitzen habitualment:



Iteradors

  1. començar () – Retorna un iterador que apunta al primer element del vector
  2. final() – Retorna un iterador que apunta a l'element teòric que segueix l'últim element del vector
  3. rbegin() – Retorna un iterador invers que apunta a l'últim element del vector (inici invers). Es mou de l'últim al primer element
  4. render () – Retorna un iterador invers que apunta a l'element teòric que precedeix el primer element del vector (considerat com a final invers)
  5. cbegin() – Retorna un iterador constant que apunta al primer element del vector.
  6. uns quants() – Retorna un iterador constant que apunta a l'element teòric que segueix l'últim element del vector.
  7. crbegin() – Retorna un iterador invers constant que apunta a l'últim element del vector (inici invers). Es mou de l'últim al primer element
  8. crend() – Retorna un iterador invers constant que apunta a l'element teòric que precedeix el primer element del vector (considerat com a final invers)

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;> }>

>

>

Sortida

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>

Capacitat

  1. mida () – Retorna el nombre d'elements del vector.
  2. mida_màx () – Retorna el nombre màxim d'elements que pot contenir el vector.
  3. capacitat () – Retorna la mida de l'espai d'emmagatzematge actualment assignat al vector expressada com a nombre d'elements.
  4. canviar la mida (n) – Redimensiona el contenidor perquè contingui ‘n’ elements.
  5. buit() – Retorna si el contenidor està buit.
  6. reduir_per_ajustar() – Redueix la capacitat del contenidor per adaptar-se a la seva mida i destrueix tots els elements més enllà de la capacitat.
  7. reserva () – Demana que la capacitat del vector sigui almenys suficient per contenir n elements.

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;> }>

>

java analitza la cadena a int
>

Sortida

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

Accés als elements

  1. operador de referència [g] – Retorna una referència a l'element a la posició 'g' del vector
  2. a (g) – Retorna una referència a l'element a la posició 'g' del vector
  3. davant () – Retorna una referència al primer element del vector
  4. esquena() – Retorna una referència a l'últim element del vector
  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;> }>

    >

    >

    Sortida

    Reference operator [g] : g1[2] = 30 at : g1.at(4) = 50 front() : g1.front() = 10 back() : g1.back() = 100 The first element is 10>

    Modificadors

    1. assignar () – Assigna un nou valor als elements vectorials substituint els antics
    2. fer retrocedir() – Empeny els elements en un vector des del darrere
    3. pop_back() – S'utilitza per fer esclatar o eliminar elements d'un vector de la part posterior.
    4. inserir () – Insereix nous elements abans de l'element a la posició especificada
    5. esborra () – S'utilitza per treure elements d'un contenidor de la posició o rang especificats.
    6. intercanviar () – S'utilitza per intercanviar el contingut d'un vector amb un altre vector del mateix tipus. Les mides poden variar.
    7. clar () – S'utilitza per eliminar tots els elements del contenidor vectorial
    8. emplace () – S'allarga el contenidor introduint un nou element en la seva posició
    9. emplace_back() – S'utilitza per inserir un nou element al contenidor vectorial, el nou element s'afegeix al final del vector

    C++




    // C++ program to illustrate the> // Modifiers in vector> #include> #include> using> namespace> std;> > int> main()> {> >// Assign vector> >vector<>int>>en;>>> >// 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] << ' '; }>

    >

    >

    Sortida

    lògica de primer ordre
    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>

    La complexitat del temps per fer diverses operacions sobre vectors és:

    • Accés aleatori: constant O(1)
    • Inserció o eliminació d'elements al final - constant O(1)
    • Inserció o eliminació d'elements: lineal a la distància fins al final del vector O(N)
    • Coneixent la mida: constant O(1)
    • Canviar la mida del vector - Lineal O(N)

    Totes les funcions membres de std::vector

    A continuació es mostra la llista de totes les funcions membres de la classe std::vector en C++:

    Funció vectorial

    Descripció

    fer retrocedir()

    Afegeix un element al final del vector.

    pop_back()

    Elimina l'últim element del vector.

    mida ()

    Retorna el nombre d'elements del vector.

    mida_màx ()

    Retorna el nombre màxim d'elements que pot contenir el vector.

    canviar la mida ()

    Canvia la mida del vector.

    buit()

    Comprova si el vector està buit.

    operador[]

    Accedeix a l'element en una posició específica.

    a()

    Accedeix a l'element en una posició específica, amb la comprovació de límits.

    davant ()

    Accedeix al primer element del vector.

    esquena()

    Accedeix a l'últim element del vector.

    començar ()

    Retorna un iterador que apunta al primer element del vector.

    final()

    Retorna un iterador que apunta a l'element passat el final del vector.

    rbegin()

    Retorna un iterador invers que apunta a l'últim element del vector.

    render ()

    Retorna un iterador invers que apunta a l'element que precedeix el primer element del vector.

    cbegin

    Retorna const_iterator al començament

    uns quants

    Retorna const_iterator al final

    crbegin

    Retorna const_reverse_iterator per invertir l'inici

    creure

    Retorna const_reverse_iterator al final invers

    inserir ()

    Insereix elements en una posició específica del vector.

    esborra ()

    Elimina elements d'una posició o rang específics del vector.

    intercanviar ()

    Canvia el contingut del vector amb el d'un altre vector.

    clar ()

    Elimina tots els elements del vector.

    emplace ()

    Construeix i insereix un element en el vector.

    emplace_back()

    Construeix i insereix un element al final del vector.

    assignar ()

    amb forma completa
    Assigna nous valors als elements vectorials substituint els antics.

    capacitat ()

    Retorna la mida de l'espai d'emmagatzematge assignat actualment al vector.

    reserva ()

    Demana que la capacitat del vector sigui almenys suficient per contenir un nombre especificat d'elements.

    reduir_per_ajustar()

    Redueix l'ús de memòria alliberant espai no utilitzat.

    get_allocator

    Retorna una còpia de l'objecte assignador associat al vector.

    Cal llegir:

    • Com comprovar si un vector conté un element donat en C++?
    • Com trobar l'índex d'un element donat en un vector en C++
    • Ordenar un vector en C++