Listas

Anuncio
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
Descargar