-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDynarray.h
More file actions
160 lines (130 loc) · 4.06 KB
/
Dynarray.h
File metadata and controls
160 lines (130 loc) · 4.06 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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include <iostream>
#include <stdlib.h>
#include <stdexcept>
#include <algorithm> // Para std::sort
#include <unordered_map>
using namespace std;
// Declaración de la plantilla de clase Dynarray
template <typename T>
class Dynarray
{
private:
T* Array; // Puntero al array dinámico
size_t size; // Tamaño actual del array
size_t cap; // Capacidad máxima del array
public:
Dynarray() : Array(nullptr), size(0), cap(0) {}
// Destructor
~Dynarray()
{
delete[] Array; // Libera la memoria asignada al array dinámico
}
// Método para insertar un elemento en el array
void insert(const T& value)
{
if (size == cap)
{
cap = (cap == 0) ? 1 : cap * 2; // Duplica la capacidad o establece en 1 si es la primera inserción
T* newArray = new T[cap]; // Crea un nuevo array con la nueva capacidad
for (size_t i = 0; i < size; i++)
{
newArray[i] = Array[i]; // Copia los elementos del array anterior al nuevo array
}
delete[] Array; // Libera la memoria del array anterior
Array = newArray; // Actualiza el puntero al nuevo array
}
Array[size++] = value; // Inserta el nuevo elemento y actualiza el tamaño
}
// Método para eliminar un elemento del array
void remove(const T& value)
{
size_t index = 0;
// Busca el índice del elemento a eliminar
while (index < size && Array[index] != value)
{
++index;
}
if (index == size)
{
throw std::out_of_range("No ha sido encontrado"); // Lanza una excepción si el elemento no se encuentra
}
// Desplaza los elementos hacia la izquierda para llenar el espacio del elemento eliminado
for (size_t i = index; i < size; i++)
{
Array[i] = Array[i + 1];
}
--size; // Reduce el tamaño del array
}
// Método para buscar un elemento en el array
bool busqueda(const T& value) const
{
for (size_t i = 0; i < size; i++)
{
if (Array[i] == value)
{
return true; // Devuelve true si encuentra el elemento
}
}
return false; // Devuelve false si no encuentra el elemento
}
// Método para imprimir los elementos del array
void print() const
{
cout << "Estos son los elementos del array: " << endl;
for (size_t i = 0; i < size; i++)
{
cout << Array[i] << " ";
}
cout << endl;
}
// Ordena el Dynarray alfabéticamente
void sort()
{
std :: sort(Array, Array + size);
}
// Busca una cadena específica en el arreglo
bool containsString(const string& str) const {
for (size_t i = 0; i < size; ++i) {
if (Array[i] == str) {
return true;
}
}
return false;
}
//Suma de toda la cadena de numeros dentro del Array uno a uno
T sum() const {
T result = 0;
for (size_t i = 0; i < size; ++i) {
result += Array[i];
}
cout << result << endl;
return result;
}
// Promedio sería mencionar a la suma de todo y dividirlo entre dos
T promedio() const
{
if (size == 0) {
throw std::logic_error("Cannot calculate average of an empty Dynarray");
}
return static_cast<double>(sum()) / size;
}
// Moda de los elementos en el Dynarray
T mode() const{
if (size == 0) {
throw std::logic_error("Cannot calculate mode of an empty Dynarray");
}
std::unordered_map<T, size_t> countMap;
for (size_t i = 0; i < size; ++i) {
countMap[Array[i]]++;
}
T modeValue;
size_t maxCount = 0;
for (const auto& entry : countMap) {
if (entry.second > maxCount) {
modeValue = entry.first;
maxCount = entry.second;
}
}
return modeValue;
}
};