Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.
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;
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
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.
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
Otras operaciones
unsigned int size(); bool empty();
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]
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");
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 << " ";
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; }
Operaciones de borrado
void pop_back(); void clear(); iterator erase(iterator it);
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");
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 << " ";
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; }
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?
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)