Programación en C++ Librerías estándar en C++ Prof. Álvaro Sánchez Miralles UPCO ICAI Departamento de Electrónica y Automática 1 Programación en C++ Cadenas de caracteres • • Es una clase que se encuentra en librería estandar <string> Consta, entre otros, de: – todo tipo de constructores – string substr(unsigned int pos_ini = 0, unsigned int n = npos); – unsigned int find(const char *s, unsigned int pos_ini = 0); – const char *c_str(); – unsigned int length(); – char& operator[](unsigned int pos); – string& operator+=(const string& s); – string& operator+=(const char *sz); – string& erase(unsigned int pos_ini = 0, unsigned int n = npos); – bool empty(); Prof. Álvaro Sánchez Miralles UPCO ICAI Departamento de Electrónica y Automática 2 Programación en C++ Cadenas de caracteres #include <iostream> #include <string> using namespace std; int main(int argc, char* argv[]) { // inicializaciones string sCadena; string sCadena2("hola2"); sCadena = "hola"; cout << "1: " << sCadena << " " << sCadena2 1: hola hola2 2: adios 2b: hola 3: [3] a 4: hol << 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; Prof. Álvaro Sánchez Miralles UPCO ICAI Departamento de Electrónica y Automática 3 Programación en C++ Cadenas de caracteres // operaciones de busqueda cout << "5: " << sCadena.find("la",0) << endl; // operaciones de modificacion cout << "6: " << sCadena.erase(0,2) << endl; // operación de concatenación cout << "7: " << sCadena + sCadena2 << endl; // operación de comparación cout << "8: " << (sCadena == sCadena) << endl; // otras operaciones cout << "9: " << sCadena.length() << endl; return 0 5: 2 6: la 7: lahola2 8: 1 9: 2 } Prof. Álvaro Sánchez Miralles UPCO ICAI Departamento de Electrónica y Automática 4 Programación en C++ Contenedores y secuencias • • Contenedor: Es un objeto capaz de contener otros objetos – vectores (vector) – listas (list) Secuencia: Es un contenedor donde los objetos se disponen uno detrás de otro. Prof. Álvaro Sánchez Miralles UPCO ICAI Departamento de Electrónica y Automática 5 Programación en C++ Listas • • Es una clase que se encuentra en <list> Operaciones de inserción • Operaciones de borrado • No es más que una abstracción de un puntero a un nodo de la – void push_back(const T& x); lista. Inserta antes del – void push_front(const T& x); iterador. – void insert(iterator it, unsigned int ncopias, const T& x); – – – – void pop_back(); void pop_front() void clear(); iterator erase(iterator it); Para recorrer una lista, ver Iteradores – Conseguir un iterador con iterator begin(); – T& front(); – T& back(); Prof. Álvaro Sánchez Miralles UPCO ICAI Departamento de Electrónica y Automática 6 Programación en C++ Listas • Otras operaciones – unsigned int size(); – bool empty(); – void clear(); Prof. Álvaro Sánchez Miralles UPCO ICAI Departamento de Electrónica y Automática 7 Programación en C++ Iteradores • • Definición: – 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 abstración de la noción 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. Dada una secuencia begin() elem[0] end() elem[1] Prof. Álvaro Sánchez Miralles ... elem[n] UPCO ICAI Departamento de Electrónica y Automática 8 Programación en C++ Iteradores • Tipos de iteradores y operaciones output Out Lectura Acceso Escritura Iteración Comparación *p= ++ Prof. Álvaro Sánchez Miralles input In =*p -> ++ == != forward For =*p -> *p= ++ == != bidirectional random-access Bi Ran =*p =*p -> -> [] *p= *p= ++ -++ -- + - += -= == != == != < > >= <= UPCO ICAI Departamento de Electrónica y Automática 9 Programación en C++ Iteradores de una lista • iterator begin(); • iterator end(); • reverse_iterator rbegin(); (es bidireccional) • reverse_iterator rend(); (es bidireccional) Prof. Álvaro Sánchez Miralles UPCO ICAI Departamento de Electrónica y Automática 10 Programación en C++ 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"); Prof. Álvaro Sánchez Miralles UPCO ICAI Departamento de Electrónica y Automática 11 Programación en C++ 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 Prof. Álvaro Sánchez Miralles UPCO ICAI Departamento de Electrónica y Automática 12 Programación en C++ 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 Prof. Álvaro Sánchez Miralles UPCO ICAI Departamento de Electrónica y Automática 13 Programación en C++ Vectores • • • • Es una clase que se encuentra en <vector> Operaciones de inserción – 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); Prof. Álvaro Sánchez Miralles UPCO ICAI Departamento de Electrónica y Automática 14 Programación en C++ 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"); Prof. Álvaro Sánchez Miralles UPCO ICAI Departamento de Electrónica y Automática 15 Programación en C++ 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 << " "; // inseción 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 Prof. Álvaro Sánchez Miralles UPCO ICAI Departamento de Electrónica y Automática 16 Programación en C++ 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 Prof. Álvaro Sánchez Miralles UPCO ICAI Departamento de Electrónica y Automática 17