Cuando declaramos un vector así
vector<int> v;
se dice que estamos "construyendo" un vector de enteros v. Es decir, el hecho de crear un objeto implica que se "construye". En este caso, el vector v no tiene ninguna casilla, se crea vacío. Como que después se puede redimensionar con resize o con push_back esto no representa problema alguno.
Pero se puede crear un vector y que tenga 10 casillas desde el principio
vector<int> v(10);
Aquí hemos añadido, entre paréntesis y a continuación del nombre, el número de casillas que queremos. Esta forma de declarar vectores invoca específicamente un método cuya misión es construir el vector.
De hecho se denominan constructores a los métodos de la clase vector<int> que nos permiten inicializar un objeto. Los vectores, en realidad, tienen 4 constructores. Uno de ellos recibe un parámetro entero que es el número de casillas que queremos tener inicialmente y nos permite declarar el vector como lo hemos hecho en el segundo ejemplo.
Los 4 constructores son los siguientes:
vector<T>() vector<T>(int tamanyo); vector<T>(int tam, const T& t); vector<T>(const vector<T>& v);
Hay 2 cosas importantes a mencionar aquí:
En definitiva, tenemos 4 formas de inicializar vectores, que se corresponden con los 4 constructores disponibles:
Sin parámetros:
vector<int> v; vector<bool> vb;
Crea el vector vacío. Si se invoca a v.size() o vb.size() el resultado será 0 y v.empty() y vb.empty() devuelven cierto.
Con un parámetro entero:
vector<string> vs(5);
Crea el vector con tantas casillas como se indica y cada casilla se inicializa con el valor por defecto (en el caso de los strings eso será un string vacío).
Con un parámetro entero y un objeto de "muestra" (el const T& t):
vector<string> vs(5, "eco");
Crea el vector con tantas casillas como se indica y cada una se inicializa con el valor del segundo parámetro. En este caso, el vector vs contiene lo siguiente:
["eco", "eco", "eco", "eco", "eco"]
Con otro vector:
vector<string> vs2(vs); vector<string> vs3 = vs;
Las dos notaciones son la misma cosa. Este constructor se denomina el constructor de copia, porque realmente inicializa los vectores vs2 y vs3 haciendo una copia de vs.
En preparación