You are on page 1of 5

28/9/2017 Arrays - Tutoriales de C ++

Buscar: Ir
Sin iniciar sesin

Tutoriales Lenguaje C ++ Matrices registrar inicio de


sesin
C ++
Informacin
Tutoriales
Referencia
Artculos
Foro

Tutoriales Matrices
Lenguaje C ++ Una matriz es una serie de elementos del mismo tipo colocados en ubicaciones de memoria contiguas que pueden
Cdigos Ascii referenciarse individualmente aadiendo un ndice a un identificador nico.
Operaciones Booleanas
Bases Numricas Esto significa que, por ejemplo, cinco valores de tipo intse pueden declarar como una matriz sin tener que declarar 5
variables diferentes (cada una con su propio identificador). En su lugar, utilizando una matriz, los cinco intvalores se
Lenguaje C ++ almacenan en ubicaciones de memoria contiguas, y se puede acceder a los cinco utilizando el mismo identificador, con
Introduccin: el ndice apropiado.
Compiladores
Conceptos bsicos de C ++: Por ejemplo, una matriz que contiene 5 valores enteros del tipo intllamado foopodra representarse como:
Estructura de un programa
Variables y tipos
Constantes
Operadores
Entrada / Salida Bsica
Estructura del programa: donde cada panel en blanco representa un elemento de la matriz. En este caso, estos son valores de tipoint. Estos
elementos estn numerados de 0 a 4, siendo 0 el primero y 4 el ltimo; En C ++, el primer elemento de una matriz
Declaraciones y control de flujo
siempre est numerado con un cero (no uno), sin importar su longitud.
Funciones
Sobrecargas y plantillas Como una variable regular, una matriz debe declararse antes de ser utilizada. Una declaracin tpica para una matriz en
Visibilidad del nombre C ++ es: donde es un tipo vlido (como , ...), es un identificador vlido y el campo (que siempre est entre corchetes
Tipos de datos compuestos: ), especifica la longitud de la matriz en trminos de el nmero de elementos. Por lo tanto, la matriz, con cinco
Matrices elementos de tipo , se puede declarar como:
Secuencias de caracteres
Punteros type name [elements];
Memoria dinmica
Estructuras de datos typeintfloatnameelements[]
Otros tipos de datos
Clases: fooint
Clases (I)
Clases (II) int foo [5];
Miembros especiales
Amistad y herencia
Polimorfismo NOTA: El elementscampo entre corchetes [], que representa el nmero de elementos de la matriz, debe ser una
Otras caractersticas del idioma: expresin constante , ya que los arrays son bloques de memoria esttica cuyo tamao debe determinarse en tiempo de
compilacin, antes de que se ejecute el programa.
Conversiones de tipo
Excepciones
Directivas del pre procesador
Biblioteca estndar: Inicializando arreglos
Entrada / salida con archivos De forma predeterminada, las matrices regulares de mbito local (por ejemplo, las declaradas dentro de una funcin)
no se inicializan. Esto significa que ninguno de sus elementos se establece en un valor particular; su contenido est
indeterminado en el punto en que se declara la matriz.
Compra y
Vende Ripple Sin embargo, los elementos de una matriz se pueden inicializar explcitamente a valores especficos cuando se declara,
encerrando los valores iniciales entre parntesis {}. Por ejemplo:

int foo [5] = { 16, 2, 77, 40, 12071 };

Esta sentencia declara una matriz que se puede representar as:

El nmero de valores entre tirantes {}no debe ser mayor que el nmero de elementos en la matriz. Por ejemplo, en el
ejemplo anterior, foose declar tener 5 elementos (como se especifica por el nmero entre corchetes, []), y las llaves
{}contenan exactamente 5 valores, uno para cada elemento. Si se declara con menos, los elementos restantes se
establecen en sus valores por defecto (que para los tipos fundamentales, significa que se rellenan con ceros). Por
ejemplo:

int bar [5] = { 10, 20, 30 };

Crear una matriz como esta:

El inicializador puede incluso no tener valores, slo los refuerzos:

int baz [5] = { };

Esto crea una matriz de cinco intvalores, cada uno inicializado con un valor de cero:

Cuando se proporciona una inicializacin de valores para una matriz, C ++ permite la posibilidad de dejar vacos los
corchetes []. En este caso, el compilador asumir automticamente un tamao para la matriz que coincida con el

http://www.cplusplus.com/doc/tutorial/arrays/ 1/5
28/9/2017 Arrays - Tutoriales de C ++
nmero de valores incluidos entre las llaves {}:

int foo [] = { 16, 2, 77, 40, 12071 };

Despus de esta declaracin, la matriz foosera 5 intlargo, ya que hemos proporcionado 5 valores de inicializacin.

Finalmente, la evolucin de C ++ ha llevado a la adopcin de la inicializacin universal tambin para los arrays. Por lo
tanto, ya no es necesario el signo de igualdad entre la declaracin y el inicializador. Ambas afirmaciones son
equivalentes:

1 int foo[] = { 10, 20, 30 };


2 int foo[] { 10, 20, 30 };

Los arrays estticos, y aquellos declarados directamente en un espacio de nombres (fuera de cualquier funcin),
siempre se inicializan. Si no se especifica ningn inicializador explcito, todos los elementos se inicializan por defecto
(con ceros, para tipos fundamentales).

Acceso a los valores de una matriz


Los valores de cualquiera de los elementos de una matriz se pueden acceder como el valor de una variable regular del
mismo tipo. La sintaxis es:

name[index]
A continuacin de los ejemplos anteriores en los que foohaba 5 elementos y cada uno de esos elementos era de tipo
int, el nombre que se puede utilizar para referirse a cada elemento es el siguiente:

Por ejemplo, la siguiente instruccin almacena el valor 75 en el tercero elemento de foo:

foo [2] = 75;

y, por ejemplo, las copias siguientes el valor del tercer elemento de fooa una variable llamada x:

x = foo[2];

Por lo tanto, la expresin foo[2]es en s misma una variable de tipo int.

Observe que el tercer elemento de foose especifica foo[2], ya que el primero es foo[0], el segundo es foo[1], y por lo
tanto, el tercero es foo[2]. Por esta misma razn, su ltimo elemento es foo[4]. Por lo tanto, si escribimos foo[5],
estaramos accediendo al sexto elemento de foo, y por lo tanto realmente superando el tamao de la matriz.

En C ++, es sintcticamente correcto superar el intervalo vlido de ndices para una matriz. Esto puede crear
problemas, ya que acceder a elementos fuera de rango no causa errores en la compilacin, pero puede provocar
errores en tiempo de ejecucin. La razn de esto se permite se ver en un captulo posterior cuando se introducen
punteros.

En este punto, es importante poder distinguir claramente entre los dos usos que los corchetes []han relacionado con
los arrays. Realizan dos tareas diferentes: una es especificar el tamao de los arrays cuando se declaran; y el segundo
es especificar ndices para los elementos concretos de la matriz cuando se accede a ellos. No confunda estos dos
posibles usos de parntesis []con matrices.

1 int foo[5]; // declaration of a new array


2 foo[2] = 75; // access to an element of the array.

La principal diferencia es que la declaracin est precedida por el tipo de los elementos, mientras que el acceso no lo
es.

Algunas otras operaciones vlidas con matrices:

1 foo[0] = a;
2 foo[a] = 75;
3 b = foo [a+2];
4 foo[foo[a]] = foo[2] + 5;

Por ejemplo:

1 // arrays example 12206


2 #include <iostream>
3 using namespace std;
4
5 int foo [] = {16, 2, 77, 40, 12071};
6 int n, result=0;
7
8 int main ()
9 {
10 for ( n=0 ; n<5 ; ++n )
11 {
12 result += foo[n];
13 }
14 cout << result;
15 return 0;
16 }

Arrays multidimensionales

http://www.cplusplus.com/doc/tutorial/arrays/ 2/5
28/9/2017 Arrays - Tutoriales de C ++
Las matrices multidimensionales pueden ser descritas como "matrices de arrays". Por ejemplo, una matriz
bidimensional se puede imaginar como una tabla bidimensional hecha de elementos, todos ellos de un mismo tipo de
datos uniforme.

jimmyrepresenta una matriz bidimensional de 3 por 5 elementos de tipo int. La sintaxis de C ++ para esto es:

int jimmy [3][5];

y, por ejemplo, la forma de hacer referencia al segundo elemento verticalmente y cuarto horizontalmente en una
expresin sera:

jimmy[1][3]

(recuerde que los ndices de matriz siempre comienzan con cero).

Las matrices multidimensionales no se limitan a dos ndices (es decir, dos dimensiones). Pueden contener tantos ndices
como sea necesario. Aunque tenga cuidado: la cantidad de memoria necesaria para una matriz aumenta
exponencialmente con cada dimensin. Por ejemplo:

char century [100][365][24][60][60];

declara una matriz con un elemento de tipo charpara cada segundo en un siglo. Esto equivale a ms de 3 mil millones
char! As que esta declaracin consumira ms de 3 gigabytes de memoria!

Al final, los arrays multidimensionales son slo una abstraccin para los programadores, ya que los mismos resultados
se pueden lograr con una matriz simple, multiplicando sus ndices:

1 int jimmy [3][5]; // is equivalent to


2 int jimmy [15]; // (3 * 5 = 15)

Con la nica diferencia de que con matrices multidimensionales, el compilador recuerda automticamente la
profundidad de cada dimensin imaginaria. Las siguientes dos piezas de cdigo producen exactamente el mismo
resultado, pero se utiliza una matriz bidimensional mientras que la otra utiliza una matriz simple:

matriz multidimensional array pseudo-multidimensional


#define WIDTH 5 #define WIDTH 5
#define HEIGHT 3 #define HEIGHT 3

int jimmy [HEIGHT][WIDTH]; int jimmy [HEIGHT * WIDTH];


int n,m; int n,m;

int main () int main ()


{ {
for (n=0; n<HEIGHT; n++) for (n=0; n<HEIGHT; n++)
for (m=0; m<WIDTH; m++) for (m=0; m<WIDTH; m++)
{ {
jimmy[n][m]=(n+1)*(m+1); jimmy[n*WIDTH+m]=(n+1)*(m+1);
} }
} }

Ninguno de los dos fragmentos de cdigo anteriores produce ninguna salida en la pantalla, pero ambos asignan valores
al bloque de memoria llamado jimmy de la siguiente manera:

Tenga en cuenta que el cdigo utiliza constantes definidas para el ancho y la altura, en lugar de usar directamente sus
valores numricos. Esto le da al cdigo una mejor legibilidad y permite que los cambios en el cdigo se hagan
fcilmente en un solo lugar.

Arrays como parmetros


En algn momento, es posible que necesite pasar una matriz a una funcin como un parmetro. En C ++, no es posible
pasar todo el bloque de memoria representado por una matriz a una funcin directamente como argumento. Pero lo
que se puede pasar en su lugar es su direccin. En la prctica, esto tiene casi el mismo efecto, y es una operacin
mucho ms rpida y ms eficiente.

Para aceptar una matriz como parmetro para una funcin, los parmetros se pueden declarar como el tipo de matriz,
pero con corchetes vacos, omitiendo el tamao real de la matriz. Por ejemplo:

void procedure (int arg[])

Esta funcin acepta un parmetro del tipo "array of int" llamado arg. Para pasar a esta funcin una matriz declarada

http://www.cplusplus.com/doc/tutorial/arrays/ 3/5
28/9/2017 Arrays - Tutoriales de C ++
como:

int myarray [40];

sera suficiente para escribir una llamada como esta:

procedure (myarray);

Aqu tienes un ejemplo completo:

1 // arrays as parameters 5 10 15
2 #include <iostream> 2 4 6 8 10
3 using namespace std;
4
5 void printarray (int arg[], int length) {
6 for (int n=0; n<length; ++n)
7 cout << arg[n] << ' ';
8 cout << '\n';
9 }
10
11 int main ()
12 {
13 int firstarray[] = {5, 10, 15};
14 int secondarray[] = {2, 4, 6, 8, 10};
15 printarray (firstarray,3);
16 printarray (secondarray,5);
17 }

En el cdigo anterior, el primer parmetro ( int arg[]) acepta cualquier matriz cuyos elementos sean de tipo int, sea
cual sea su longitud. Por esta razn, hemos incluido un segundo parmetro que indica a la funcin la longitud de cada
matriz que pasamos a ella como su primer parmetro. Esto permite que el bucle for que imprima la matriz para saber
el rango a iterar en la matriz pasada, sin salir de rango.

En una declaracin de funcin, tambin es posible incluir matrices multidimensionales. El formato para un parmetro de
matriz tridimensional es:

base_type[][depth][depth]

Por ejemplo, una funcin con una matriz multidimensional como argumento podra ser:

void procedure (int myarray[][3][4])

Observe que los primeros parntesis []quedan vacos, mientras que los siguientes especifican tamaos para sus
dimensiones respectivas. Esto es necesario para que el compilador pueda determinar la profundidad de cada dimensin
adicional.

De alguna manera, pasar una matriz como argumento siempre pierde una dimensin. La razn detrs es que, por
razones histricas, las matrices no se pueden copiar directamente, y as lo que realmente pasa es un puntero. Esta es
una fuente comn de errores para los programadores principiantes. Aunque una clara comprensin de los punteros,
explicada en un prximo captulo, ayuda mucho.

Arrays de la biblioteca
Las matrices explicadas anteriormente se implementan directamente como una caracterstica de lenguaje, heredada del
lenguaje C. Son una gran caracterstica, pero al restringir su copia y convertirse fcilmente en punteros, probablemente
sufran un exceso de optimizacin.

Para superar algunos de estos problemas con arrays integrados en lenguaje, C ++ proporciona un tipo de matriz
alternativa como un contenedor estndar. Es una plantilla de tipo (una plantilla de clase, de hecho) definida en el
encabezado <array>.

Los contenedores son una caracterstica de la biblioteca que cae fuera del alcance de este tutorial, y por lo tanto la
clase no se explicar en detalle aqu. Basta con decir que funcionan de forma similar a las matrices incorporadas, salvo
que permiten copiar (una operacin realmente costosa que copia todo el bloque de memoria y, por lo tanto, utilizarlo
con cuidado) y decaer en punteros slo cuando explcitamente (por medio de su miembro data).

A modo de ejemplo, se trata de dos versiones del mismo ejemplo que utilizan la matriz integrada en el lenguaje
descrita en este captulo y el contenedor de la biblioteca:

matriz integrada en el lenguaje matriz de la biblioteca de contenedores


#include <iostream> #include <iostream>
#include <array>
using namespace std; using namespace std;

int main() int main()


{ {
int myarray[3] = {10,20,30}; array<int,3> myarray {10,20,30};

for (int i=0; i<3; ++i) for (int i=0; i<myarray.size(); ++i)
++myarray[i]; ++myarray[i];

for (int elem : myarray) for (int elem : myarray)


cout << elem << '\n'; cout << elem << '\n';
} }

Como se puede ver, los dos tipos de matrices utilizan la misma sintaxis para acceder a sus elementos: myarray[i].
Aparte de eso, las diferencias principales estaban en la declaracin de la matriz, y la inclusin de un encabezado
adicional para la matriz de la biblioteca . Observe tambin cmo es fcil acceder al tamao de la matriz de la biblioteca
.

Anterior: Siguiente:

http://www.cplusplus.com/doc/tutorial/arrays/ 4/5
28/9/2017 Arrays - Tutoriales de C ++
Visibilidad del nombre Secuencias de caracteres

ndice

Breakdancing

Lo que sea tu Negocio.


Pgina principal | Poltica de privacidad
cplusplus.com, 2000-2017 - Todos los derechos reservados - v3.1
Ha encontrado un error? Contctenos

http://www.cplusplus.com/doc/tutorial/arrays/ 5/5

You might also like