En programacion, una matriz o vector (llamado en inglés array)
es una zona de almacenamiento continuo, que contiene una serie de
elementos del mismo tipo, los elementos de la matriz. Desde el punto de
vista lógico una matriz se puede ver como un conjunto de elementos
ordenados en fila (o filas y columnas si tuviera dos dimensiones).
En principio, se puede considerar que todas las matrices son de una
dimensión, la dimensión principal, pero los elementos de dicha fila
pueden ser a su vez matrices (un proceso que puede ser recursivo),
lo que nos permite hablar de la existencia de matrices
multidimensionales, aunque las más fáciles de imaginar son los de una,
dos y tres dimensiones.
Estas estructuras de datos son adecuadas para situaciones en las que
el acceso a los datos se realice de forma aleatoria e impredecible. Por
el contrario, si los elementos pueden estar ordenados y se va a utilizar
acceso secuencial sería más adecuado utilizar una lista, ya que esta estructura puede cambiar de tamaño fácilmente durante la ejecución de un programa.
Vectores dinámicos y estáticos
Lo habitual es que un vector tenga una cantidad fija de
memoria asignada, aunque dependiendo del tipo de vector y del lenguaje de
programación un vector podría tener una cantidad variable de datos. En este
caso, se les denomina vectores dinámicos, en oposición, a los vectores con una
cantidad fija de memoria asignada se los denomina vectores estáticos.
El uso de vectores dinámicos requiere realizar una apropiada
gestión de memoria dinámica. Un uso incorrecto de los vectores dinámicos, o
mejor dicho, una mala gestión de la memoria dinámica, puede conducir a una fuga
de memoria. Al utilizar vectores dinámicos siempre habrá que liberar la memoria
utilizada cuando ésta ya no se vaya a seguir utilizando.
Lenguajes más modernos y de más alto nivel, cuentan con un
mecanismo denominado recolector de basura (como es el caso de Java) que
permiten que el programa decida si debe liberar el espacio basándose en si se
va a utilizar en el futuro o no un determinado objeto.
Ejemplos en C
Declaración en C/C++ de un vector estático.
int main(void){
int i, v[5]; // v[5] es un vector de 5 componentes
for(i=0; i<5; i++) {
v[i] = 0; // Asignamos un valor
printf("%d\n", v[i]);
printf("\n"); // Crea una nueva línea }
return 0
}
int main(void){
int i, v[5]; // v[5] es un vector de 5 componentes
for(i=0; i<5; i++) {
v[i] = 0; // Asignamos un valor
printf("%d\n", v[i]);
printf("\n"); // Crea una nueva línea }
return 0
}
Declaración en
C/C++ de un vector estático utilizando aritmética de punteros.
Siendo el identificador del vector, un puntero constante que
contiene la dirección del comienzo del vector (vector[0], primer elemento)
int main(void)
{
int i, v[5]; // v[5] es un vector de 5 componentes
for(i=0; i<5;
i++)
{
*(v + i) = 0; //
Asignamos un valor en la dirección (vector + ((índice * sizeof (int) cantidad
de bytes de desplazamiento desde la base.)
printf("%d\n", *(vector + i));
printf("\n"); // Crea una nueva línea
}
return 0
}
Declaración en C++
de un vector de STL:
#include <vector>
vector<int> v; // Si no se especifica el tamaño
inicial es 0
for(int i=0 ;i<5 ;i++)
{
v.push_back(2*i); //
inserta un elemento al final del vector
}
El ejemplo anterior está hecho para el lenguaje C++. En C,
para crear vectores dinámicos se tendrían que utilizar las instrucciones malloc
y realloc para reservar memoria de forma dinámica (ver biblioteca stdlib.h), y
la función free para liberar la memoria utilizada
- Todos los elementos de un vector deben ser del mismo tipo.
- Cada elemento de un vector se almacena en una localidad de memoria separada.
- Cada elemento de un vector es accedido a través de un subíndice único.
- El rango del subíndice varía de 0 a n-1, siendo n el número de elementos del vector.
- Un vector recibe un nombre, independientemente del número de elementos que contenga.
- Antes de usar un vector, éste debe ser declarado como cualquier otra variable.
- Para acceder a un elemento de un vector se usa el nombre, seguido de su posición dentro del vector entrecorchetes: nombre_vector[subíndice].
No hay comentarios:
Publicar un comentario