13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 57 — #95<br />

✐<br />

2.7. Introducción a los vectores<br />

(<strong>en</strong> este caso que va a manejar el vector), hay que poner el nombre del tipo deseado<br />

<strong>en</strong>tre «llaves angulares». Por lo que un vector de string se d<strong>en</strong>ota como vector.<br />

Con eso, se crea un vector a medida que solam<strong>en</strong>te cont<strong>en</strong>drá objetos<br />

string, y recibirá un m<strong>en</strong>saje de error del compilador si int<strong>en</strong>ta poner otra cosa <strong>en</strong><br />

él.<br />

Como el vector expresa el concepto de «cont<strong>en</strong>edor», debe existir una manera<br />

de meter cosas <strong>en</strong> él y sacar cosas de él. Para añadir un nuevo elem<strong>en</strong>to al final del<br />

vector, se una el método push_back(). Recuerde que, como es un método, hay que<br />

usar un ’.’ para invocarlo desde un objeto particular. La razón de que el nombre de<br />

la función parezca un poco verboso - push_back() <strong>en</strong> vez de algo más simple como<br />

put - es porque exist<strong>en</strong> otros cont<strong>en</strong>edores y otros métodos para poner nuevos<br />

elem<strong>en</strong>tos <strong>en</strong> los cont<strong>en</strong>edores. Por ejemplo, hay un insert() para poner algo <strong>en</strong><br />

medio de un cont<strong>en</strong>edor. vector la soporta pero su uso es más complicado y no<br />

necesitamos explorarla hasta el segundo volum<strong>en</strong> del libro. También hay un push-<br />

_front() (que no es parte de vector) para poner cosas al principio. Hay muchas<br />

más funciones miembro <strong>en</strong> vector y muchos más cont<strong>en</strong>edores <strong>en</strong> la Librería Estándar,<br />

pero le sorpr<strong>en</strong>derá ver la de cosas que se pued<strong>en</strong> hacer con sólo un par de<br />

características básicas.<br />

Así que se pued<strong>en</strong> introducir elem<strong>en</strong>tos <strong>en</strong> un vector con push_back() pero<br />

¿cómo puede sacar esos elem<strong>en</strong>tos La solución es intelig<strong>en</strong>te y elegante: se usa la sobrecarga<br />

de operadores para que el vector se parezca a un array. El array (que será<br />

descrito de forma más completa <strong>en</strong> el sigui<strong>en</strong>te capítulo) es un tipo de datos que está<br />

disponible prácticam<strong>en</strong>te <strong>en</strong> cualquier l<strong>en</strong>guaje de programación por lo que debería<br />

estar familiarizado con él. Los arrays son agregados lo que significa que consist<strong>en</strong><br />

<strong>en</strong> un número de elem<strong>en</strong>tos agrupados. La característica distintiva de un array es<br />

que estos elem<strong>en</strong>tos ti<strong>en</strong><strong>en</strong> el mismo tamaño y están organizados uno junto a otro. Y<br />

todavía más importante, que se pued<strong>en</strong> seleccionar mediante un índice, lo que significa<br />

que puede decir: «Quiero el elem<strong>en</strong>to número n» y el elem<strong>en</strong>to será producido,<br />

normalm<strong>en</strong>te de forma rápida. A pesar de que exist<strong>en</strong> excepciones <strong>en</strong> los l<strong>en</strong>guajes<br />

de programación, normalm<strong>en</strong>te se indica la «indexación» mediante corchetes, de tal<br />

forma que si se ti<strong>en</strong>e un array a y quiere obt<strong>en</strong>er el quinto elem<strong>en</strong>to, sólo ti<strong>en</strong>e que<br />

escribir a[4] (fíjese <strong>en</strong> que la indexación siempre empieza <strong>en</strong> cero).<br />

Esta forma compacta y poderosa de notación indexada se ha incorporado al vector<br />

mediante la sobrecarga de operadores como el > de los iostreams.<br />

De nuevo, no hay que saber cómo se ha implem<strong>en</strong>tado la sobrecarga de operadores<br />

- lo dejamos para un capítulo posterior - pero es útil que sea consci<strong>en</strong>te que hay<br />

algo de magia detrás de todo esto para conseguir que los corchetes funcion<strong>en</strong> con el<br />

vector.<br />

Con todo esto <strong>en</strong> m<strong>en</strong>te, ya puede ver un programa que usa la clase vector.<br />

Para usar un vector, hay que incluir el fichero de cabecera :<br />

//: C02:Fillvector.cpp<br />

// Copy an <strong>en</strong>tire file into a vector of string<br />

#include <br />

#include <br />

#include <br />

#include <br />

using namespace std;<br />

int main() {<br />

vector v;<br />

ifstream in("Fillvector.cpp");<br />

string line;<br />

57<br />

✐<br />

✐<br />

✐<br />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!