C++ Insertando Elementos


Ejemplo

Anexando un elemento al final de un vector (copiando / moviendo):

struct Point {
  double x, y;
  Point(double x, double y) : x(x), y(y) {}
};
std::vector<Point> v;
Point p(10.0, 2.0);
v.push_back(p);  // p is copied into the vector.
C ++ 11

Anexando un elemento al final de un vector construyendo el elemento en su lugar:

std::vector<Point> v;
v.emplace_back(10.0, 2.0); // The arguments are passed to the constructor of the
                           // given type (here Point). The object is constructed
                           // in the vector, avoiding a copy.

Tenga en cuenta que std::vector no tiene una función miembro push_front() debido a razones de rendimiento. Al agregar un elemento al principio, se mueven todos los elementos existentes en el vector. Si desea insertar elementos con frecuencia al principio de su contenedor, puede usar std::list o std::deque .


Insertando un elemento en cualquier posición de un vector:

std::vector<int> v{ 1, 2, 3 };
v.insert(v.begin(), 9);          // v now contains {9, 1, 2, 3}
C ++ 11

Insertando un elemento en cualquier posición de un vector construyendo el elemento en su lugar:

std::vector<int> v{ 1, 2, 3 };
v.emplace(v.begin()+1, 9);     // v now contains {1, 9, 2, 3}

Insertando otro vector en cualquier posición del vector:

std::vector<int> v(4);      // contains: 0, 0, 0, 0
std::vector<int> v2(2, 10); // contains: 10, 10
v.insert(v.begin()+2, v2.begin(), v2.end()); // contains: 0, 0, 10, 10, 0, 0

Insertando una matriz en cualquier posición de un vector:

std::vector<int> v(4); // contains: 0, 0, 0, 0
int a [] = {1, 2, 3}; // contains: 1, 2, 3
v.insert(v.begin()+1, a, a+sizeof(a)/sizeof(a[0])); // contains: 0, 1, 2, 3, 0, 0, 0

Use reserve() antes de insertar múltiples elementos si el tamaño del vector resultante se conoce de antemano para evitar múltiples reasignaciones (consulte el tamaño y la capacidad del vector ):

std::vector<int> v;
v.reserve(100);
for(int i = 0; i < 100; ++i)
    v.emplace_back(i);

Asegúrese de no cometer el error de llamar a resize() en este caso, o de lo contrario, creará un vector con 200 elementos en los que solo los últimos cien tendrán el valor deseado.