vector::emplace_back en C++ STL

Los vectores son lo mismo que las arrays dinámicas con la capacidad de cambiar su tamaño automáticamente cuando se inserta o elimina un elemento, y el contenedor maneja automáticamente su almacenamiento.

vector::emplace_back()

Esta función se utiliza para insertar un nuevo elemento en el contenedor de vectores, el nuevo elemento se agrega al final del vector.
Sintaxis:

vectorname.emplace_back(value)
Parameters :
The element to be inserted into the vector
is passed as the parameter.
Result :
The parameter is added to the
vector at the end position.

Ejemplos:

Input: myvector{1, 2, 3, 4, 5};
         myvector.emplace_back(6);
Output: myvector = 1, 2, 3, 4, 5, 6

Input: myvector{};
         myvector.emplace_back(4);
Output: myvector = 4

Errores y excepciones:

  1. Tiene una fuerte garantía de excepción, por lo tanto, no se realizan cambios si se lanza una excepción.
  2. El parámetro debe ser del mismo tipo que el del contenedor, de lo contrario, se arroja un error.

Ejemplo 1:

// INTEGER VECTOR EXAMPLE
// CPP program to illustrate
// Implementation of emplace() function
#include <iostream>
#include <vector>
using namespace std;
  
int main()
{
    vector<int> myvector;
    myvector.emplace_back(1);
    myvector.emplace_back(2);
    myvector.emplace_back(3);
    myvector.emplace_back(4);
    myvector.emplace_back(5);
    myvector.emplace_back(6);
    // vector becomes 1, 2, 3, 4, 5, 6
  
    // printing the vector
    for (auto it = myvector.begin(); it != myvector.end(); ++it)
        cout << ' ' << *it;
   
    return 0;
      
}

Producción:

1 2 3 4 5 6

Ejemplo 2:

// STRING VECTOR EXAMPLE
// CPP program to illustrate
// Implementation of emplace() function
#include <iostream>
#include <vector>
#include <string>
using namespace std;
  
int main()
{
    // vector declaration
    vector<string> myvector;
    myvector.emplace_back("This");
    myvector.emplace_back("is");
    myvector.emplace_back("a");
    myvector.emplace_back("computer science");
    myvector.emplace_back("portal");
  
    // vector becomes This, is, a computer science, portal
  
    // printing the vector
    for (auto it = myvector.begin(); it != myvector.end(); ++it)
        cout << ' ' << *it;
   
    return 0;
      
}

Producción:

This is a computer science portal

Ejemplo 3:

// CHARACTER VECTOR EXAMPLE
// CPP program to illustrate
// Implementation of emplace() function
#include <iostream>
#include <vector>
using namespace std;
  
int main()
{
    vector<char> myvector;
    myvector.emplace_back('a');
    myvector.emplace_back('c');
    myvector.emplace_back('x');
    myvector.emplace_back('y');
    myvector.emplace_back('z');
    // vector becomes a, c, x, y, z
  
    // printing the vector
    for (auto it = myvector.begin(); it != myvector.end(); ++it)
        cout << ' ' << *it;
   
    return 0;
      
}

Producción:

a, c, x, y, z

Complejidad de tiempo: O(1)

Aplicación:
dado un vector vacío, agregue números enteros usando la función emplace_back y luego calcule su tamaño.

Input  : 1, 2, 3, 4, 5, 6
Output : 6

Algoritmo

  1. Agregue elementos al vector usando la función emplace_back
  2. Verifique si el tamaño del vector es 0, de lo contrario, incremente la variable de contador inicializada como 0 y extraiga el elemento posterior.
  3. Repita este paso hasta que el tamaño del vector sea 0.
  4. Imprime el valor final de la variable.
// CPP program to illustrate
// Application of emplace_back function
#include <iostream>
#include <vector>
using namespace std;
   
int main()
{
    int count = 0;
    vector<int> myvector;
    myvector.emplace_back(1);
    myvector.emplace_back(2);
    myvector.emplace_back(3);
    myvector.emplace_back(4);
    myvector.emplace_back(5);
    myvector.emplace_back(6);
    while (!myvector.empty()) {
        count++;
        myvector.pop_back();
    }
    cout << count;
    return 0;
}

Producción:

6

emplace_back() frente a push_back()

  1. push_back() copia una string en un vector. Primero, se creará implícitamente un nuevo objeto de string inicializado con char* proporcionado. Luego se llamará a push_back, que copiará esta string en el vector usando el constructor de movimiento porque la string original es un objeto temporal. Entonces el objeto temporal será destruido.
  2. emplace_back() construye una string en el lugar, por lo que no se creará una string temporal, sino que se llamará a emplace_back() directamente con el argumento char*. A continuación, creará una string que se almacenará en el vector inicializado con este carácter*. Entonces, en este caso, evitamos construir y destruir un objeto de string temporal innecesario.

Consulte emplace vs insert en C++ STL para obtener más información.

// C++ code to demonstrate difference between
// emplace_back and insert_back
#include<bits/stdc++.h>
using namespace std;
    
int main()
{
    // declaring priority queue
    vector<pair<char, int>> vect;
        
    // using emplace() to insert pair in-place
    vect.emplace_back('a', 24);
        
    // Below line would not compile
    // vect.push_back('b', 25);    
        
    // using push_back() to insert
    vect.push_back(make_pair('b', 25));    
        
    // printing the vector
    for (int i=0; i<vect.size(); i++)
        cout << vect[i].first << " " << vect[i].second
             << endl;
   
    return 0;
}

Producción:

a 24
b 25

Publicación traducida automáticamente

Artículo escrito por AyushSaxena y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *