Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema 3: Tdas Contenedores Básicos
Tema 3: Tdas Contenedores Básicos
TDAs contenedores
bsicos
Objetivos Generales
Entender el concepto de contenedor
Conocer los principales tipos de
contenedores bsicos
Resolver problemas usando contenedores
Entender el concepto de iterador y ser
capaz de usarlos.
Contenedores secuenciales
Organizan los datos en orden lineal:
primer elemento, segundo, ...
Contenedores directos
Garantizan acceso a cualquier componente
en tiempo constante:
Vector dinmico (vector)
Contenedores asociativos
Gestionan los datos mediante claves que
los identifican (por ejemplo, DNI) y permiten
su recuperacin eficiente a partir de ellas.
Conjunto (set)
Bolsa (multiset)
Diccionario (map)
10
11
12
13
14
15
16
17
Iteradores en la STL
Las clases de la STL poseen cuatro clases
de iteradores dependiendo de:
La forma de recorrer, o
Si permite slo lecturas (L), o insertar otros
nuevos o modificar ya existentes (E):
iterator: hacia adelante (L, E).
const_iterator: hacia adelante (L).
reverse_iterator: hacia atrs (L, E).
const_reverse_iterator: hacia atrs (L).
TDAs Contenedores Bsicos
18
19
Ejemplo:
list<double>::iterator iterListaDouble;
map<String,int>::const_iterator iterDiccConst;
20
21
(III)
(IV)
/**
@brief Constructor primitivo.
Crea un iterador nulo.
*/
const_iterator();
/**
@brief Constructor de copia.
@param i: iterador que se copia.
Crea un iterador copia de i.
*/
23
(V)
/**
@brief Obtener el elemento al que apunta el iterador.
@pre El iterador NO est al final del recorrido.
Es distinto de end().
@return elemento del contenedor en la posicin apuntado
por el iterador.
*/
T operator*() const;
24
(VI)
/**
@brief Operador de incremento.
@pre El iterador NO est al final del recorrido.
Es distinto de end().
@return Referencia al iterador receptor.
Hace que el iterador apunte a la posicin siguiente en el
contenedor y lo devuelve.
*/
const_iterator & operator++();
25
(VII)
/**
@brief Operador de decremento.
@pre El iterador NO est al principio del recorrido.
Es distinto de begin().
@return Referencia al iterador receptor.
Hace que el iterador apunte a la posicin anterior
en el contenedor y lo devuelve.
*/
const_iterator & operator--();
26
(VIII)
/**
@brief Comparacin de igualdad.
@param i: segundo iterador en la comparacin.
@return true, si el receptor e 'i' tienen el mismo valor.
false, en otro caso.
*/
bool operator==(const const_iterator & i);
27
(IX)
/**
@brief Comparacin de desigualdad.
@param i: segundo iterador en la comparacin.
@return true, si el receptor e 'i' tienen un valor distinto.
false, en otro caso.
*/
bool operator!=(const const_iterator & i);
28
(X)
Ejemplo:
template <class T1, class T2>
void ImprimirContenedor (const T1<T2>& contenedor)
{
T1::const_iterator iter;
for (iter = contenedor.begin(); iter != contenedor.end();
iter++)
cout << *iter << endl;
}
TDAs Contenedores Bsicos
29
(II)
30
(III)
/** stack<T>
TDA stack::stack, empty, clear, swap, top, push, pop,
size, ~stack
Cada objeto del TDA pila, modela una pila de
elementos de la clase T.
Una pila es una secuencia de elementos donde las
inserciones y borrados tienen lugar en un extremo
denominado "tope". Son contenedores del tipo LIFO
(Last In, First Out).
Son objetos mutables. Residen en memoria dinmica.
*/
TDAs Contenedores Bsicos
31
(II)
/**
@brief Constructor primitivo.
Crea una pila vaca.
*/
stack();
/**
@brief Constructor de copia.
@param p: pila que se copia.
Crea una pila que es copia de p.
*/
stack(const stack<T> & p);
TDAs Contenedores Bsicos
32
(III)
/**
@brief Constructor primitivo.
Crea una pila vaca.
*/
stack();
/**
@brief Constructor de copia.
@param p: pila que se copia.
Crea una pila que es copia de p.
*/
stack(const stack<T> & p);
TDAs Contenedores Bsicos
33
(III)
/**
@brief Informa si la pila est vaca.
@return true, si la pila est vaca.
false, en otro caso.
*/
bool empty() const;
/**
@brief Borra todos los elementos del contenedor.
Deja el contenedor completamente vaco.
*/
void clear();
TDAs Contenedores Bsicos
34
(IV)
/**
@brief Intercambia el contenido del receptor y del
argumento.
@param p: pila a intercambiar con el receptor. ES
MODIFICADO.
Este mtodo asigna el contenido del
receptor al del parmetro y el del parmetro al
del receptor.
*/
void swap (stack<T> & p);
35
(V)
/**
@brief Acceso al elemento en lo alto de la pila.
@pre El receptor no puede estar vaco: !empty().
@return Referencia al elemento en el tope
*/
T& top ();
/**
@brief Acceso al elemento en el tope de la pila.
@pre El receptor no puede estar vaco: !empty().
@return Referencia constante al tope de la pila.
*/
const T& top () const;
TDAs Contenedores Bsicos
36
(VI)
/**
@brief Deposita un elemento en la pila.
@param elem: Elemento que se inserta.
Inserta un nuevo elemento en el tope de la pila.
*/
void push(const T & elem);
/**
@brief Quita un elemento de la pila.
@pre El receptor no puede estar vaco: !empty().
Elimina el elemento en el tope de la pila.
*/
void pop();
37
(VII)
/**
@brief Obtiene el nmero de elementos.
@return Nmero de elementos de la pila.
*/
size_type size() const;
/**
@brief Destructor.
@post El receptor es MODIFICADO.
El receptor es destruido liberando los recursos.
*/
~stack();
Otras operaciones: ==, !=, <, >, <=, >= , =.
TDAs Contenedores Bsicos
38
39
40
41
42
return v.top();
} // fin de la funcin
43
44
45
46
47
48
49
50
51
52
53
54
q.pop();
q.pop();
55
q.pop();
q.pop();
56
57
58
59
60
61
62
63
64
65
66
67
q.push(22.2);
TDAs Contenedores Bsicos
q.push(44.4);
68
q.pop();
q.pop();
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
coll1.insert(3);
coll1.insert(5);
coll1.insert(1);
coll1.insert(6);
coll1.insert(2);
coll1.insert(5);
IntSet::iterator pos;
for (pos = coll1.begin(); pos != coll1.end();++pos)
cout << *pos << ' ';
cout << endl;
TDAs Contenedores Bsicos
116
117
118
119
120
121
#include <pair>
using namespace std;
pair<int,String> miPar(3, ``Hola'');
cout << miPar.first << `` `` << miPar.second << endl;
122
123
125
126
127
128
129
130
131
132
133
134
135
Eficiencia: logartmica.
*/
iterator lower_bound (const value_type & clave);
TDAs Contenedores Bsicos
136
137
138
139
140
141
142
143
144
145
146
147
148
149
unIterador = dicc[unaCadenaNumero[index]];
if( unIterador != dicc.end() )
cout << unIterador->second << " " << flush;
else cout << "[err] " << flush;
}
cout << endl;
150
151
152
154
155
156
157
158
159
160
161
162
163
165
166
167
168
"<< sentence.size()
<< endl;
169
170
171
172
La lista de la compra.
TDAs Contenedores Bsicos
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
} // While
} // funcin
TDAs Contenedores Bsicos
191
*/
{
list<int>::iterator i=l.end(); --i;
if ( *i<x ) l.insert(l.end(),x);
else {
for (--i; *i>x && i!=l.begin();--i);
if ( *i>x && i==l.begin()) l.insert(l.begin(),x);
else l.insert(++i,x);
}}
192
++q;
while (q != l.end()) {
if (*p == *q) q = l.erase(q);
else ++q;
}
}}
193
194
int contador; };
195
lc.insert(lc.begin(),aux);
it = l1.begin();
++it;
196
Un comentario final
Observando las diferentes operaciones de
los contenedores set, multiset, map,
multmap,vector y list, podemos concluir que
existe una serie de operaciones comunes a
todos ellos:
Construtor primitivo.
Constructor de copia.
Constructor de copia a partir de un rango.
Destructor.
TDAs Contenedores Bsicos
197
198
199