3. Vectores
• En programación, por lo general se
requiere recolectar o agregar objetos.
Por lo tanto, la clase vector es uno de
los contenedores de STL más
frecuentemente usados.
Mtl. Lourdes Cahuich 3
4. Vectores
• Como un contenedor de STL, la clase
vector brinda acceso a sus elementos a
través de iteradores.
• Los iteradores permiten
interoperabilidad de los objetos vector y
los algoritmos de STL
Mtl. Lourdes Cahuich 4
5. vector<int> v;
for (int i = 0; i < 10; i++) {
v.push_back(i);
}// Iterate though elements
vector<int>::iterator it;
for (it = v.begin();
it != v.end(); it++) {
cout << *it << endl;
}
Mtl. Lourdes Cahuich 5
6. Vectores
• El segundo bucle-for, que saca el
contenido del vector al flujo de salida
estándar, usa las funciones miembro
begin y end de la clase vector.
• Estas funciones regresan los
iteradores en el vector que las
invoca.
Mtl. Lourdes Cahuich 6
7. Vectores
• La función begin regresa un
iterador en el primer elemento del
vector, y la función end regresa un
iterador posicionado más allá del último
elemento en el vector.
Mtl. Lourdes Cahuich 7
8. Vectores
• En el segundo bucle-for se inicializa el
iterador it al iterador regresado por
la función begin.
• Durante cada iteración, el bucle-for
incrementa el iterador it.
• Esto causa que el iterador se recorra
a través del vector.
Mtl. Lourdes Cahuich 8
9. Vectores
• El recorrido termina cuando el
iterador iguala al iterador
regresado de la función end
ostream_iterator<int> out(cout, quot;nquot;);
copy(v.begin(), v.end(), out);
Mtl. Lourdes Cahuich 9
10. Vectores - copy
• La función copy de STL copia una
secuencia de elementos.
• El primer y segundo parámetros son
iteradores que delimitan la
secuencia.
• El tercer parámetro especifica donde
copiar la secuencia.
Mtl. Lourdes Cahuich 10
11. Vectores - copy
• En el listado anterior, el tercer
parámetro es un iterador del flujo de
salida inicializado al flujo de salida
estándar.
• Esto causa que la función copy saque a
la consola los elementos almacenados
en el vector.
Mtl. Lourdes Cahuich 11
12. Vectores –cambio iteradores
• Si quisiéramos sacar los elementos en
el vector en orden inverso (de atrás
hacia adelante), necesitamos cambiar
los iteradores usados.
• El siguiente listado usa las funciones
rbegin y rend en lugar de las
funciones begin y end.
Mtl. Lourdes Cahuich 12
13. Vectores - copy
• Las funciones rbegin y rend regresan
los iteradores en el último elemento
y una posición antes del primer
elemento, respectivamente
Mtl. Lourdes Cahuich 13
14. vector<int> v;
for (int i = 0; i < 10; i++) {
v.push_back(i);
}
ostream_iterator<int> out(cout,quot;nquot;);
copy(v.rbegin(), v.rend(), out);
Mtl. Lourdes Cahuich 14
15. Vectores – insertar y eliminar
• La clase vector también brinda
soporte para la inserción y eliminación
de elementos de cualquier parte del
vector.
• Las funciones insert y erase
desempeñan esas tareas.
• Estas funciones toman los iteradores
del vector como parámetros.
Mtl. Lourdes Cahuich 15
16. Vectores – insertar y eliminar
• Para apreciar el poder de las funciones
insert y erase debemos entender
exactamente lo que estas funciones
hacen.
• Consideremos el vector en la sig. figura
y las tareas que la función insert
desempeña para insertar un elemento
(con un valor de 5) al frente de ese
vector
Mtl. Lourdes Cahuich 16
17. Vectores – tamaño y capacidad
• Tamaño y capacidad son dos
propiedades diferentes de un vector.
• El tamaño del vector en la figura es
tres, debido a que almacena tres
elementos.
Mtl. Lourdes Cahuich 17
18. Vectores – tamaño y capacidad
• Este vector también tiene reservados
cuatro lugares de memoria para
permitir la adición de nuevos
elementos.
• El número de lugares reservados de
memoria, más el tamaño es conocido
como la capacidad.
Mtl. Lourdes Cahuich 18
19. Vectores – tamaño y capacidad
• El tener una capacidad más grande que
su tamaño permite que operaciones
como insert o push_back se
completen sin tener que colocar
memoria adicional.
• La colocación de memoria solo se
realiza cuando se agotan los lugares de
memoria reservados
Mtl. Lourdes Cahuich 19
20. Vectores – tamaño y capacidad
• Antes de añadir al inicio el elemento
nuevo, la función insert debe copiar
los elementos existentes un lugar a la
derecha para crear un espacio vacío
para el elemento nuevo.
Mtl. Lourdes Cahuich 20
21. Vectores – tamaño y capacidad
• La sig. figura representa el estado del
vector después de que la función copia
los elementos un espacio a la derecha.
Mtl. Lourdes Cahuich 21
22. Vectores – tamaño y capacidad
• El elemento nuevo con el valor de 5 es
posteriormente copiado en el lugar
vacío
Mtl. Lourdes Cahuich 22
23. Vectores – tamaño y capacidad
• Para insertar sólo un elemento al frente
del vector, la función insert tiene que
mover primero los otros elementos.
• La función erase se realiza de forma
similar.
Mtl. Lourdes Cahuich 23
24. Vector - erase
• Para borrar el primer elemento en un
vector, la función erase debe copiar
todos los elementos restantes un lugar
a la izquierda.
Mtl. Lourdes Cahuich 24
25. Vector - erase
• Todo este proceso de copiado puede
llegar a ser pesado si estamos tratando
con un vector que contiene un número
grande de elementos.
Mtl. Lourdes Cahuich 25