Vector (informatica)

In le programmation, un **matrice** o **vector** (appellate in anglese **array**) es un zona de immagazinage continue, que contine un serie de elementos del mesme typo, le elementos del matrice. Ab le puncto de vista logic un matrice pote esser vidite como un ensemble de elementos ordinate in cauda (o rangos e columnas si illo ha duo dimensiones). 

In principio, on pote considerar que tote le matrices son de un dimension, le dimension principal, sed le elementos del dicite cauda pote esser a lor vices matrices (un processo que pote esser recursive), lo que nos permitte de parlar del existentia de matrices multidimensional, ben que le plus facile a imaginar es los de un, duo, e tres dimensiones.

Iste structuras de datos es adequate pro situationes in le quales le accesso al datos se realisa de forma aleatori e impredicibile. Al contrario, si le elementos pote se trovar ordinate e on va a usar un accesso sequential il esserea plus adequate de usar un lista, durante que iste structura pote cambiar de mesura facilemente durante le execution de un programma.

## Historia

Le prime computatores digital usava le programmation in linguage de machina pro cerar e acceder a structuras de matrice pro tabellas de datos, computationes de vector e de matrice, e pro multe altere scopos. John von Neumann scribeva le prime programma de ordinamento de matrices (merge sort, ordinamento per fusion) in 1945, durante le construction del prime computator que usa programmas immagazinate in memoria. Le indexation de matrices se faceva originalmente per medio de codice auto-modificante. Plus tarde se usava registros de indice e le adressage indirecte. Alcun computatores central concipite in le decennio 1960, como le Burroughs B5000 e su successores, usava le segmentation de memoria pro verificar le limites del indices in hardware.

Le linguages de assemblage generalmente non ha appoio particular de matrices e depende de lo que le machina forni illo mesme. Le prime linguages de programmation de alte nivello, como FORTRAN (1957), Lisp (1958), COBOL (1960) e ALGOL 60 (1960), poteva gerer le matrices multidimensional, como lo pote etiam C (1972). In C++ (1983), modellos de classe existe pro matrices multidimensional con dimensiones fixe o flexibile al tempore de execution.

## Indices
Tote vector se compone de un numero determinate de elementos. Cata elemento es referentiate per le position que illo occupa intra le vector. Le dicite positiones es appellate **indice** e sempre es correlative. Il ha tres manieras de indexar le elementos de un matrice:

* **Indexation base-zero (0):** In iste modo le prime elemento del vector es le componente zero ('0') le qual, in altere parolas, ha le indice '0'. In consequentia, si le vector ha 'n' componentes le ultime habera como indice le valor 'n-1'. Le linguage C es un exemplo typic que usa iste modo de indexation.

* **Indexation base-un (1):** In iste forma de indexation, le prime elemento del matrice ha le indice '1' e le ultime ha le indice 'n' (pro un matrice de 'n' componentes).

* **Indexation base-n (n):** Iste es un modo versatile de indexation in le qual le indice del prime elemento pote esser seligite liberemente, in alcun linguages de programmation on permitte que le indices pote esser negative e include de qualcunque typo scalar (anque catenas de characteres).

## Notation
Le representation de un elemento in un vector se face per le identificator del vector sequite del indice inter parentheses quadrate, parentheses o claves:

Ben que multe vices in pseudocodice e in libros de mathematica on los representa como litteras accompaniate de un subindice numeric que indica le position al qual on vole acceder. Per exemplo, pro un vector "**A**":

A_0, A_1, A_2, ...   (vector unidimensional)

## Forma de accesso
Le maniera de acceder al elementos del matrice es **directe**; isto significa que le elemento desirate es obtenite a partir de su indice e illo non debe vader a cercar lo "elemento per elemento" (in contraposition, in le caso de un lista, pro arrivar, per exemplo, al tertie elemento illo debe acceder al duo anteriores o immagazinar un punctator que permitte acceder rapidemente a iste elemento).

Pro travaliar con vectores multe vices il es precise de percurrer los. Isto se realisa a fortia de buclas. Le sequente pseudocodice monstra un algorithmo typic pro percurrer un vector e applicar un function 'f(...)' a cata un del componentes del vector (le indices va ab 0):


```
i = 0
durante_que (i < longitude)
    #Se realisa alcun operation con le vector in le i-esime position
    f(v[i])
    i=i+1
fin_durante_que
```


## Vectores dynamic e static
Habitualmente un vector ha un quantitate fixe de memoria assignate, ben que dependente del typo de vector e del linguage de programmation un vector poterea haber un quantitate variabile de datos. In iste caso, illo se denomina un **vector dynamic**, in oposition, a un vector con un quantitate fixe de memoria assignate  se denomina un **vector static**.

Le uso de vectores dynamic require de realisar un gestion de memoria dynamic appropriate. Un uso incorrecte del vectores dynamic, o melior dicite, un mal gestion del memoria dynamic, pote conducer a un fuga de memoria. Le uso de vectores dynamic deberea sempre liberar le memoria usate quando illo non es plus longe usate.

Linguages plus moderne e de plus alte nivello con un mechanismo denominate recollector de immunditias (como es le caso de Java)  permitte que le programma decide si illo debe liberar le spatio reguardante si illo va usar in le futuro o non un determinate objecto. 

### Exemplos in C
* Declaration in C/C++ de un vector static.


```c
int v[5];
int i;
for (i=0 ; i<5 ; i++)
{	v[i] = 2*i;
}
```


* Declaration in C++ de un vector de STL:


```c
#include <vector>

vector<int> v; // Si on non specifica le mesura initial es 0

for (int i=0 ; i<5 ; i++)
{	v.push_back(2*i); // inserta un elemento al fin del vector
}
```


Le exemplo anterior se trova facite pro le linguage C++. In C, pro crear vectores dynamic on deberea usar le instructiones *[http://c.conclase.net/librerias/funcion.php?fun=malloc malloc] * e *[http://c.conclase.net/librerias/funcion.php?fun=realloc realloc] * pro reservar del memoria de forma dynamic (vider libreria stdlib.h), e le function per *[http://c.conclase.net/librerias/funcion.php?fun=free free] * pro liberar le memoria usate.

* Resultato:



*Le resultato del duo exemplos es le mesme vector*


## Vectores multidimensional
In BASIC, Java e altere linguages il es possibile de declarar matrices multidimensional, comprendente los como un vector de vectores. In le dicte casos le numero de elementos del vector es le producto resultante de cata dimension.

Per exemplo, in le vector v(4,1)  ha dece elementos, le numero de elementos se calcula del modo sequente: (0-4) * (0-1). Le elementos del prime dimension del vector contine cinque elementos  va ab '0' al '4' e le secundo dimension ha duo elementos  va ab '0' a '1'. Le elementos esserea accedite del maniera sequente: 
: elemento 1: (0,0) 
: elemento 2: (0,1) 
: elemento 3: (1,0) 
: ...
: elemento 8: (3,1) 
: elemento 9: (4,0) 
: elemento 10: (4,1)