C++ Inicializando un std :: vector


Ejemplo

Un std::vector puede inicializarse de varias maneras mientras lo declara:

C ++ 11
std::vector<int> v{ 1, 2, 3 };  // v becomes {1, 2, 3}

// Different from std::vector<int> v(3, 6)
std::vector<int> v{ 3, 6 };     // v becomes {3, 6}
// Different from std::vector<int> v{3, 6} in C++11
std::vector<int> v(3, 6);  // v becomes {6, 6, 6}

std::vector<int> v(4);     // v becomes {0, 0, 0, 0}

Un vector se puede inicializar desde otro contenedor de varias maneras:

Copiar construcción (solo de otro vector), que copia datos de v2 :

std::vector<int> v(v2);
std::vector<int> v = v2;
C ++ 11

Mueve la construcción (solo desde otro vector), que mueve los datos de v2 :

std::vector<int> v(std::move(v2));
std::vector<int> v = std::move(v2);

Construcción de copia de iterador (rango), que copia elementos en v :

// from another vector
std::vector<int> v(v2.begin(), v2.begin() + 3); // v becomes {v2[0], v2[1], v2[2]}

// from an array
int z[] = { 1, 2, 3, 4 };
std::vector<int> v(z, z + 3);                   // v becomes {1, 2, 3}

// from a list
std::list<int> list1{ 1, 2, 3 };
std::vector<int> v(list1.begin(), list1.end()); // v becomes {1, 2, 3}
C ++ 11

Iterador move-construction, utilizando std::make_move_iterator , que mueve elementos a v :

// from another vector
std::vector<int> v(std::make_move_iterator(v2.begin()),
                   std::make_move_iterator(v2.end());

// from a list
std::list<int> list1{ 1, 2, 3 };
std::vector<int> v(std::make_move_iterator(list1.begin()),
                   std::make_move_iterator(list1.end()));

Con la ayuda de la función miembro assign() , un std::vector se puede reinicializar después de su construcción:

v.assign(4, 100);                      // v becomes {100, 100, 100, 100}

v.assign(v2.begin(), v2.begin() + 3);  // v becomes {v2[0], v2[1], v2[2]}

int z[] = { 1, 2, 3, 4 };
v.assign(z + 1, z + 4);                // v becomes {2, 3, 4}