Sei sulla pagina 1di 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> 1: hola hola2 using namespace std; 2: adios int main(int argc, char* argv[]) 2b: hola { 3: [3] a // inicializaciones 4: hol string sCadena; 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; // operaciones de modificacion cout << "6: " << sCadena.erase(0,2) << endl; // 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 }

5: 2 6: la 7: lahola2 8: 1 9: 2

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() elem[0] elem[1] ... end() 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

Potrebbero piacerti anche