-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathvector.h
More file actions
133 lines (91 loc) · 2.78 KB
/
vector.h
File metadata and controls
133 lines (91 loc) · 2.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#ifndef _VECTOR_TEMPLATE_
#define _VECTOR_TEMPLATE_
#include <iostream>
template <typename Dato>
class Vector {
private:
Dato** datos;
int largo;
public:
// Constructor sin parámetros.
//pre: -
//post: Instancia un Vector "vacío" con todos sus atributos nulos.
Vector();
// Destructor.
//pre: -
//post: Libera toda la memoria dinámica utilizada por el Vector.
~Vector();
//pre: La 'posicion' se encuentra en el intervalo que va desde 0 hasta (largo - 1).
// No se puede usar en un Vector "vacío".
//post: Devuelve el dato en la posición ingresada.
Dato* obtener_dato(int posicion);
//pre: -
//post: Devuelve el largo del Vector.
int obtener_largo();
//pre: La 'posicion' se encuentra en el intervalo que va desde 0 hasta (largo - 1).
// No se puede usar en un Vector "vacío".
//post: Inserta el 'dato' en la posición ingresada.
void insertar_posicion(int posicion, Dato* dato);
//pre: -
//post: Inserta el 'dato' al final del Vector. Reserva memoria para el 'dato' y actualiza el valor de su largo.
void insertar_ultimo(Dato* dato);
//pre: La 'posicion' se encuentra en el intervalo que va desde 0 hasta (largo - 1).
// No se puede usar en un Vector "vacío".
//post: Borra el 'dato' ubicado en la posición ingresada.
// Modifica la memoria utilizada y actualiza el valor de su largo.
void borrar_posicion(int posicion);
void borrar_todo();
};
template <typename Dato>
Vector<Dato>::Vector() {
this -> largo = 0;
this -> datos = nullptr;
}
template <typename Dato>
Vector<Dato>::~Vector() {
borrar_todo();
}
template <typename Dato>
Dato* Vector<Dato>::obtener_dato(int posicion) {
return datos[posicion];
}
template <typename Dato>
int Vector<Dato>::obtener_largo() {
return largo;
}
template <typename Dato>
void Vector<Dato>::insertar_posicion(int posicion, Dato* dato) {
datos[posicion] = dato;
}
template <typename Dato>
void Vector<Dato>::insertar_ultimo(Dato* dato) {
Dato** nuevos_datos = new Dato* [largo + 1];
for (int i = 0; i < largo; i++) {
nuevos_datos[i] = datos[i];
}
nuevos_datos[largo] = dato;
if (largo != 0) {
delete[] datos;
}
datos = nuevos_datos;
largo++;
}
template <typename Dato>
void Vector<Dato>::borrar_posicion(int posicion) {
Dato** nuevos_datos = new Dato* [largo - 1];
for (int i = 0; i < posicion; i++) {
nuevos_datos[i] = datos[i];
}
for (int i = posicion; i < largo - 1; i++) {
nuevos_datos[i] = datos[i + 1];
}
delete[] datos;
datos = nuevos_datos;
largo--;
}
template <typename Dato>
void Vector<Dato>::borrar_todo() {
delete[] datos;
largo = 0;
}
#endif // _VECTOR_TEMPLATE_