In leprogrammation, unmatrice ovector (appellate inanglesearray) 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 esserrecursive), 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.
Istestructuras de datos es adequate pro situationes in le quales le accesso aldatos 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 unlista, durante que iste structura pote cambiar de mesura facilemente durante le execution de un programma.
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 delprime computator que usa programmas immagazinate in memoria. Le indexation de matrices se faceva originalmente per medio decodice auto-modificante. Plus tarde se usavaregistros de indice e leadressage indirecte. Alcun computatores central concipite in le decennio 1960, como leBurroughs B5000 e su successores, usava lesegmentation 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, comoFORTRAN (1957),Lisp (1958),COBOL (1960) eALGOL 60 (1960), poteva gerer le matrices multidimensional, como lo pote etiamC (1972). InC++ (1983), modellos de classe existe pro matrices multidimensional con dimensiones fixe[1] o flexibile[2] al tempore de execution.
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 appellateindice 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'. Lelinguage 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 alcunlinguages de programmation on permitte que le indices pote esser negative e include de qualcunque typoscalar (anque catenas de characteres).
Le representation de un elemento in un vector se face per leidentificator del vector sequite del indice inter parentheses quadrate, parentheses o claves:
Ben que multe vices inpseudocodice e in libros demathematica 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":
Le maniera de acceder al elementos del matrice esdirecte; 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 unpunctator que permitte acceder rapidemente a iste elemento).
Pro travaliar con vectores multe vices il es precise de percurrer los. Isto se realisa a fortia debuclas. Le sequentepseudocodice monstra unalgorithmo typic pro percurrer un vector e applicar un function '' a cata un del componentes del vector (le indices va ab 0):
i = 0durante_que (i < longitude) #Se realisa alcun operation con le vector in le i-esime position f(v[i]) i=i+1fin_durante_que
Habitualmente un vector ha un quantitate fixe de memoria assignate, ben que dependente del typo de vector e dellinguage de programmation un vector poterea haber un quantitate variabile dedatos. In iste caso, illo se denomina unvector dynamic, in oposition, a un vector con un quantitate fixe de memoria assignate se denomina unvector static.
Le uso de vectores dynamic require de realisar ungestion de memoria dynamic appropriate. Un uso incorrecte del vectores dynamic, o melior dicite, un mal gestion del memoria dynamic, pote conducer a unfuga 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 denominaterecollector de immunditias (como es le caso deJava) permitte que le programma decide si illo debe liberar le spatio reguardante si illo va usar in le futuro o non un determinate objecto.
#include<vector>vector<int>v;// Si on non specifica le mesura initial es 0for(inti=0;i<5;i++){v.push_back(2*i);// inserta un elemento al fin del vector}
InBASIC,Java e alterelinguages 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)
Referentias
↑“MultiArray: a C++ library for generic programming with arrays”(2005).
↑Bjoern Andres. "Runtime-Flexible Multi-dimensional Arrays and Views for C++98 and C++0x".arXiv:1008.2909.