Está en la página 1de 21

Libreras estndar en C++

STL: Standard Template Library

lvaro Snchez Miralles


Jos Porras
(Fidel Fernndez)
Cadenas de caracteres
Es una clase que se encuentra en librera estandar <string>
Consta, entre otros, de:
todo tipo de constructores
string substr(unsigned int pos_ini = 0,
unsigned int n = npos);
Devuelve una subcadena de la cadena que lo invoca
formada por los caracteres que ocupan las posiciones entre
pos_ini y pos_ini+n.
unsigned int find(const char *s, unsigned int
pos_ini = 0);
Devuelve la posicin de la subcadena s dentro de la cadena
que lo invoca, buscando a partir de la posicin inicial
pos_ini.
const char *c_str();
Usada para conseguir un char* cuando se tiene una
cadena de tipo string.
unsigned int length();
Devuelve la longitud de la cadena de caracteres que lo
invoca.

Programacin de Robots Mviles - Librera estndar - 2


Cadenas de caracteres
char& operator[](unsigned int pos);
Usado para acceder a cada uno de los caracteres de una
cadena. El uso es el mismo que el de un vector.
string& operator+=(const string& s);
string& operator+=(const char *sz);
Usadas para concatenar cadenas de caracteres.
string& erase(unsigned int pos_ini = 0,
unsigned int n = npos);
Borra los caracteres entre la pos_ini y pos_ini+n de la
cadena que lo invoca.
bool empty();
Indica si una cadena est o no vaca.

Programacin de Robots Mviles - Librera estndar - 3


Cadenas de caracteres

#include <iostream>
#include <string>
using namespace std; 1: hola hola2
int main(int argc, char* argv[]) 2: adios
{ 2b: hola
// inicializaciones 3: [3] a
string sCadena; 4: hol
string sCadena2("hola2");
sCadena = "hola";
cout << "1: " << sCadena << " " << sCadena2 << endl;

// paso de char* a string y viceversa


char szCadena[10]="adios";
sCadena = szCadena;
cout << "2: " << sCadena << endl;
sCadena = "hola";
strcpy(szCadena,sCadena.c_str());
cout << "2b: " << szCadena << endl;

// operaciones de acceso
cout << "3: " << "[3] " << sCadena[3] << endl;
cout << "4: " << sCadena.substr(0,3) << endl;

Programacin de Robots Mviles - Librera estndar - 4


Cadenas de caracteres

// operaciones de busqueda
cout << "5: " << sCadena.find("la",0) << endl;
5: 2
6: la
// operaciones de modificacion
7: lahola2
cout << "6: " << sCadena.erase(0,2) << endl;
8: 1
9: 2
// operacin de concatenacin
cout << "7: " << sCadena + sCadena2 << endl;
// operacin de comparacin
cout << "8: " << (sCadena == sCadena) << endl;
// otras operaciones
cout << "9: " << sCadena.length() << endl;
return 0
}

Programacin de Robots Mviles - Librera estndar - 5


Contenedores
Contenedor: es un objeto capaz de contener otros
objetos
vectores (vector): acceso a objetos rpido, pero lento en
inserciones y borrados.
listas (list): acceso a objetos lento, pero rpido en
inserciones y borrados.
El manejo de una lista y de un vector es muy
similar esto hace que tengan muy parecidas
funciones miembro.
Regla general:
Si se quiere un contenedor con tamao poco variable,
usar un vector, sino usar una lista.

Programacin de Robots Mviles - Librera estndar - 6


Plantillas
Las plantillas permiten programar un clase o una
funcin de forma genrica: es decir que valga para
diferentes tipos de datos.
Por ejemplo
int main(int argc, char* argv[])
{
list<string> l_s; // lista de cadenas de caracteres
vector<double> v_d; // vector de double
vector<int> v_i; // vector de int
....

Cuando se programa:
Como no se sabe el tipo de datos que va a usar se usa un
tipo de datos genrico (en este caso es T)
void push_back(const T& x);
Esto es una funcin que usa como parmetro una
variable x de tipo T
Slo se sabe qu es T cuando se hace una instancia de la
clase; es decir, un objeto.

Programacin de Robots Mviles - Librera estndar - 7


Listas
Es una clase que se encuentra en <list>
Operaciones de insercin
void push_back(const T& x);
Inserta al final de la lista que lo invoca
void push_front(const T& x);
Inserta al inicio de la lista que lo invoca
void insert(iterator it, unsigned int ncopias,
const T& x);
Inserta antes del iterador. No es ms que una abstraccin de
un puntero a un nodo de la lista. Ver siguientes diapositivas

Programacin de Robots Mviles - Librera estndar - 8


Listas

Operaciones de borrado
void pop_back();
Elimina del final de la lista que lo invoca
void pop_front()
Elimina el primer elemento de la lista que lo invoca
void clear();
Elimina todos los elementos
iterator erase(iterator it);
Elimina el elemento que indica el iterador.

Programacin de Robots Mviles - Librera estndar - 9


Listas
Para recorrer una lista, ver Iteradores ms adelante
Conseguir un iterador con iterator begin();
Devuelve un iterador al principio de la lista
T& front();
Devuelve el primer elemento de la lista
T& back();
Devuelve el ltimo elemento de la lista
Otras operaciones
unsigned int size();
bool empty();

Programacin de Robots Mviles - Librera estndar - 10


Iteradores
Definicin:
Un iterador es un objeto que hace las funciones de cursor
puntero con el objetivo de poder acceder a los elementos
de una secuencia.
Es una abstracin de la nocin de un puntero a un
elemento de una secuencia de datos (vector, lista, ...)
Por ejemplo:
int* es un iterador de int[ ]
list<int>::iterator es un iterador de la clase list.
Dado un contenedor

begin() end()

elem[0] elem[1] ... elem[n]

Programacin de Robots Mviles - Librera estndar - 11


Iteradores de una lista
Iteradores de una lista
iterator begin();
iterator end();
reverse_iterator rbegin(); (es bidireccional)
reverse_iterator rend(); (es bidireccional)
Operaciones de los iteradores
Similares a los punteros
void operator++()
Mueve el iterador al siguiente elemento
T& operator*()
Devuelve el contenido apuntado por el iterador

Programacin de Robots Mviles - Librera estndar - 12


Listas ejemplo

#include <iostream>
#include <string>
#include <list>
using namespace std ;

int main(int argc, char* argv[])


{
list<string> List;
list<string>::iterator iList;
list<string>::reverse_iterator riList;
char szNum[3];

// inserciones en la lista
List.push_back("A1");
List.push_back("B2");
List.push_back("C3");
List.push_back("D4");
List.push_back("E5");
List.push_back("F6");
List.push_back("G7");

Programacin de Robots Mviles - Librera estndar - 13


Listas ejemplo

// recorrer la lista, mostrar por pantalla e insertar nodos


iList=List.begin();
cout << "La lista es: ";
int iTamano = List.size();
for (int i = 0; i < iTamano ; i++, iList++)
{
cout << *iList << " ";
List.insert(iList,1,itoa(i,szNum,10));
}

// recorrer la lista en sentido inverso


riList=List.rbegin();
cout << "\nLa lista 2 es: ";
for (i = 0; i < List.size() ; i++, riList++)
cout << *riList << " ";

La lista es: A1 B2 C3 D4 E5 F6 G7
La lista 2 es: G7 6 F6 5 E5 4 D4 3 C3 2 B2 1 A1 0

Programacin de Robots Mviles - Librera estndar - 14


Listas ejemplo

// borrado de nodos y mostrar lista por pantalla


List.pop_back();
List.pop_front();
iList=List.begin();
cout << "\nLa lista 3 es: ";
for (i = 0; i < List.size() ; i++, iList++)
cout << *iList << " ";

// funciones de vaciado de lista


cout << "\nVacia? " << List.empty();
List.clear();
cout << "\nVacia de nuevo? " << List.empty();
return 0;
}

La lista 3 es: A1 1 B2 2 C3 3 D4 4 E5 5 F6 6
Vacia? 0
Vacia de nuevo? 1

Programacin de Robots Mviles - Librera estndar - 15


Vectores
Es una clase que se encuentra en <vector>
Operaciones de insercin
void push_back(const T& x);
void insert(iterator it, unsigned int ncopias,
const T& x);
Operaciones de borrado
void pop_back();
void clear();
iterator erase(iterator it);
Para recorrer un vector, ver Iteradores
conseguir un iterador con iterator begin();
T& front();
T& back();
T& operator[](unsigned int pos);

Programacin de Robots Mviles - Librera estndar - 16


Vector ejemplo

#include <iostream>
#include <string>
#include <vector>
using namespace std ;

int main(int argc, char* argv[])


{
vector<string> Vector(1);
vector<string>::iterator iVector;
vector<string>::reverse_iterator riVector;

// inserciones en el vector
Vector[0] = "A1";
Vector.push_back("B2");
Vector.push_back("C3");
Vector.push_back("D4");
Vector.push_back("E5");
Vector.push_back("F6");
Vector.push_back("G7");

Programacin de Robots Mviles - Librera estndar - 17


Vector ejemplo

// recorrer el vector, mostrar por pantalla


cout << "\nEl vector es: ";
iVector=Vector.begin();
cout << Vector[0] << " ";
iVector++;
for (i = 1; i < Vector.size() ; i++, iVector++)
cout << *iVector << " ";
// insecin de nodos de otra manera
Vector.resize(8);
Vector[7] = "8";
iVector=Vector.end();
Vector.insert(iVector,2,"9");
// recorrer la lista en sentido inverso
riVector=Vector.rbegin();
cout << "\nEl vector 2 es: ";
for (i = 0; i < Vector.size() ; i++, riVector++)
cout << *riVector << " ";

El vector es: A1 B2 C3 D4 E5 F6 G7
El vector 2 es: 9 9 8 G7 F6 E5 D4 C3 B2 A1

Programacin de Robots Mviles - Librera estndar - 18


Vector ejemplo

// borrado de nodos y mostrar vector por pantalla


Vector.pop_back();
iVector=Vector.begin();
cout << "\nEl vector 3 es: ";
for (i = 0; i < Vector.size() ; i++, iVector++)
cout << *iVector << " ";

// funciones de vaciado de vector


cout << "\nVacio? " << Vector.empty();
Vector.clear();
cout << "\nVacio de nuevo? " << Vector.empty();
return 0;
}

El vector 3 es: A1 B2 C3 D4 E5 F6 G7 8 9
Vacio? 0
Vacio de nuevo? 1

Programacin de Robots Mviles - Librera estndar - 19


Ejercicio
Modificar la clase CPoligono y CEntorno, para que
en vez de usar un vector [] de C, use un
contenedor de la librera estndar de C++
Se usar una lista o un vector?

Programacin de Robots Mviles - Librera estndar - 20


Nuestras limitaciones
La programacin con plantillas o templates no es
objetivo de este curso, es complicada y truculenta.
Disear plantillas es todo un arte y permite dar mucha
flexibilidad a los programas
Existen alternativas para no usar plantillas, pero que
requieren conocimientos muy avanzados de C++ para
conseguir lo mismo que con ellas
En este curso slo hace falta saber utilizarlas para poder
usar la librera estndar de C++, que est toda construida
con plantillas, de ah su nombre. (STL: standard template
library)
La librera estndar define muchos ms conceptos
Ms contenedores: map, multimap, set, etc.
Ms iteradores
Ms conceptos: secuencias, algoritmos, alocadores,
gestin de errores, etc.

Programacin de Robots Mviles - Librera estndar - 21

También podría gustarte