Вы находитесь на странице: 1из 9

Arrays, arreglos o vectores en C++.

Uso, declaracin y sintaxis de los vectores en C++


Los arrays son usados extensamente por los programadores para contener listas de datos en la
memoria, por ejemplo, los datos almacenados en un disco suelen leerse y ponerse dentro de un array
con el objetivo de facilitar la manipulacin de dichos datos, ya que los datos en memoria pueden ser
modificados, clasificados, marcados para su eliminacion, etc. para luego ser reescritos al disco. Otro
ejemplo podra ser el de un men de opciones que se desplegarn dentro de una ventana para que el
usuario pueda elegir una de stas, en tales casos y cuando las opciones son numerosas, solamente
se ponen unas cuantas de ellas dentro de la ventana pero se le da al usuario la oportunidad de poder
subir y bajar a su antojo para ver el resto de opciones que, aunque no se vean en la ventana, forman
parte del men o array de opciones.
Array:
Un array es un conjunto de datos del mismo tipo ordenados de forman lneal uno despus de otro.
Los componentes de un array se han de referenciar por medio del nombre del array y un ndice de
desplazamiento para indicar el componente deseado.
Indices de un array
Los ndices son nmeros que se utilizan para identificar a cada uno de los componentes de un array.
A modo de ejemplo, podemos pensar que los ndices son como los nmeros de habitaciones de un
hotel, es decir, para poder dirigirnos a un hotel especfico es necesario saber el nombre del mismo,
luego, si queremos llegar a una habitacin especfica de dicho hotel necesitaremos, adems del
nombre del hotel, el nmero de habitacin deseado.
Dimensiones de un array
De acuerdo a la forma en que se construye o declara un array, ste puede ser clasificado como:
unidimensional, bidimensional y multidimensional. Los arrays que se emplean con mucha ms
frecuencia son los estructurados a manera de vector ( array unidimensional ) y los estructurados a
manera de matriz ( array bidimensional ), as, aunque en C++ se pueden crear estructuras
multidimensionales, en este captulo solo trataremos con vectores y matrices.
Array unidimensional
Una array uni-dimensional es aquel en donde los componentes son accesibles por medio de uno y
solamente un ndice que apunte al componente requerido. Los arrays de este tipo son conocidos
tambin con el nombre de vectores. Conceptualmente, podemos pensar en un array unidimensional
como una lista compuesta de datos, donde para referirnos a uno de ellos emplearemos un nmero
para indicar la posicin del mismo dentro de la lista. Por ejemplo, consideremos el caso de la tabla o
array VentaSemanal, la cual est pensada para registrar las ventas de cada uno de los das de la
semana. De manera conceptual podemos ver el array como se muestra a continuacin:
Nota: en C++ los arrays estn basados en 0 ( cero ), es decir, el primer elemento de un array se
indexa mediante el 0, y el ndice para el ltimo de los elementos es igual al nmero de componentes
menos uno.
array: VentaSemanal
+------+

| dato | <-- componente 0, ( fila 0 )


|------|
| dato | <-- componente 1, ( fila 1 )
|------|
| dato | ...|------|
| dato | ...
|------|
| dato | ...
|------|
| dato | ...
|------|
| dato | <-- componente 6, ( fila 6 )
|------|
Si en el array VentaSemanal queremos que el elemento 4 ( por ejemplo ) contenga el valor de 8987 lo
podemos lograr con la instruccin: VentaSemanal[4] = 8987;y el estado del array sera:
array: VentaSemanal
+------+
| dato |
|------|
| dato |
|------|
| dato |
|------|
| dato |
|------|
| 8987 | <--- componente 4
|------|
| dato |
|------|
| dato |
|------|
Array bidimensional
Un array bi-dimensional es aquel en donde los componentes son accesibles por medio de una pareja
de ndices que apunten a la fila y a la columna del componente requerido. Los arrays de este tipo son
conocidos tambin con el nombre de matrices. Conceptualmente, podemos pensar en un array
bidimensional como en una lista compuesta de filas y columnas, en donde para referirnos a una de
ellas emplearemos un nmero para indicar la posicin de fila y otro nmero para indicar la posicin de
la columna del componente deseado. Por ejemplo, consideremos el caso de la tabla o array
VentaSemanaQ, la cual est pensada para registrar las ventas de cada uno de los das de la semana
por cuatro semanas, o sea, una tabla de 7 x 4 elementos. De manera conceptual podemos ver el
array como se muestra a continuacin:
array: VentaSemanaQ
C O LU M N AS

+--- componente ( 0, 0 )
|
+------+------+------+------+
| dato | dato | dato | dato |
|------|------|------|------|
F | dato | dato | dato | dato |
|------|------|------|------|
I | dato | dato | dato | dato |
|------|------|------|------|
L | dato | dato | dato | dato |
|------|------|------|------|
A | dato | dato | dato | dato |
|------|------|------|------|
S | dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | dato |
+------+------+------+------+
|
+---- componente ( 6, 3 )
Si en el array VentaSemanaQ queremos que el elemento de la fila 4, columna 3 ( por ejemplo )
contenga el valor de 5000 lo podemos lograr con la instruccin: VentaSemanaQ[4][3] = 5000; y el
estado del array sera:
array: VentaSemanaQ
+--- componente ( 0, 0 )
|
+------+------+------+------+
| dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | 5000 | <-- componente ( 4, 3 )
|------|------|------|------|
| dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | dato |
+------+------+------+------+
|
+---- componente ( 6, 3 )
Declaracin de arrays en C, C++
En C, C++ para declarar un array se emplea la sintaxis:
tipo identificador [tamao] = { lista de inicializacin } ;
donde,

tipo se refiere al tipo de datos que contendr el array. El tipo puede ser cualquiera de los tipos
estndar (char, int, float, etc.) o un tipo definido por el usuario. Es ms, el tipo del array puede ser de
una estructura creada con: struct, union y class.
identificador se refiere al nombre que le daremos al array.
tamao es opcional e indica el nmero de elementos que contendr el array. Si un array se
declara sin tamao, el mismo no podr contener elemento alguno a menos que en la declaracin se
emplee una lista de inicializacin.
lista de inicializacin es opcional y se usa para establecer valores para cada uno de los
componentes del array. Si el array es declarado con un tamao especfico, el nmero de valores
inicializados no podr ser mayor a dicho tamao.
Ejemplos:
int intA[5];
long longA[5] = { 1, 2, 3, 4, 5 };
char charA[3] = { 'a', 'b', 'c' };
Cadenas de caracteres
En C, C++ las cadenas de caracteres no son ms que arrays de caracteres, salvo que a este tipo de
arrays el compilador les da un tratamiento especial. Usted puede manipular las cadenas de
caracteres de la misma manera en que manipula cualquier otro tipo de array, sin embargo, es
preferible hacer uso de una librera estndar especialmente escrita para manipulacion de cadenas de
caracteres, me refiero a la librera <string.h> y que viene incluida con todo compilador de C, C++.
Para comenzar y antes de ver algunas de las funciones de la mencionada librera, tenemos los
siguientes ejemplos:
1. char nombre[] = "Oscar";
2. char nombre2[] = { 'O', 's', 'c', 'a', 'r', '\0' };

En el ejemplo 1 se est declarando la variable nombre como una cadena de caracteres y


cuyo contenido inicial es "Oscar".
En el ejemplo 2 se est declarando la variable nombre2 como una cadena de caracteres y
cuyo contenido inicial es { 'O', 's', 'c', 'a', 'r', '\0' };.
En ambos casos el resultado es el mismo, es decir, al final se obtiene la misma cadena, pero usted
debe poner atencin al hecho de que toda cadena de caracteres en C, C++ debe terminar con el
carcter NULL, que normalmente es igual a cero y se puede escribir como '\0'. Ahora bien, cuando
usted usa la sintaxis mostrada en el ejemplo 1 no tiene que preocuparse por agregar el
caracter NULL, ya que esto lo hace el compilador automticamente.
La biblioteca string
Los compiladores de C, C++ dan soporte a la biblioteca de funciones <string.h>, a la que accede por
medio de la directiva #include <string.h>. No veremos en detalle todas las funciones contenidas en
dicha biblioteca, y nos limitaremos a mostrar algunos ejemplos de ciertas funciones importantes.
strlen(): Obtener longitud de cadenas
Sintaxis: size_t strlen(const char *s);
Comentarios: La funcin strlen() devuelve la longitud de la cadena s.
Ejemplo:
char *nombre = "Oscar E. Palacios";
cout << strlen(nombre) << endl;
strcpy(): Copiar cadenas
Sintaxis: char *stpcpy(char *dest, const char *src);

Comentarios: stpcpy copia la cadena src hacia dest, la funcin termina hasta haber encontrado en src
el carcter de terminacin null.
Ejemplo:
char *nombre = "Oscar E. Palacios";
char copia[80];
strcpy(copia, nombre);
cout << copia << endl;
strcat(): Concatenar cadenas
Sintaxis: char *strcat(char *dest, const char *src);
Comentarios: strcat agrega la cadena src a dest, la funcin termina hasta haber encontrado en src el
carcter de terminacin null.
Ejemplo:
char nombre[] = "Oscar E.";
char copia[80] = " Palacios";
strcat(copia, nombre);
cout << copia << endl;
strlwr(): Convertir a minsculas.
Sintaxis: char *strlwr(char *dest);
Comentarios: strlwr convierte todos los caracteres alfabticos ( 'A' .. 'Z' ) en dest a sus
correspondientes caracteres alfabticos ( 'a' .. 'z' ).
Ejemplo:
char nombre[] = "Oscar E. Palacios";
strlwr(nombre);
cout << nombre << endl;
strupr(): Convertir a maysculas.
Sintaxis: char *strupr(char *dest);
Comentarios: strupr convierte todos los caracteres alfabticos ( 'a' .. 'z' ) en dest a sus
correspondientes caracteres alfabticos ( 'A' .. 'Z' ).
strchr(): Buscar carcter ( hacia adelante )
Sintaxis: char *strchr(char *s, int c);
Comentarios: strchr busca en s el caracter c. La busqueda se lleva a cabo desde el inicio hasta el
final de s.
Regreso: si la operacin es exitosa strchr regresa un puntero hacia la primera ocurrencia de c en s,
en caso contrario strchr regresa null.
Ejemplo:
char nombre[] = "Oscar E. Palacios";
char *p;
p = strchr(nombre, 'E');
if (p) {
cout << "nombre contiene a E" << endl;
cout << "indice = " << (p - nombre) << endl;
}
else cout << "E no est en nombre" << endl;

strrchr(): Buscar carcter ( hacia atras )


Sintaxis: char *strrchr(char *s, int c);
Comentarios: strchr busca en s el caracter c. La busqueda se lleva a cabo desde el final hasta el
inicio de s.
Regreso: si la operacin es exitosa strchr regresa un puntero hacia la ltima ocurrencia de c en s, en
caso contrario strchr regresa null.
Ejemplo:
char nombre[] = "Oscar E. Palacios";
char *p;
p = strrchr(nombre, 'E');
if (p) {
cout << "nombre contiene a E" << endl;
cout << "indice = " << (p - nombre) << endl;
}
else cout << "E no est en nombre" << endl;

Los arrays, arreglos o vectores forman parte de la amplia variedad de estructuras de datos que nos
ofrece C++, siendo adems una de las principales y ms tiles estructuras que podremos tener como
herramienta de programacin. Los arrays, arreglos o vectores (como los quieras llamar), son
utilizados para almacenar mltiples valores en una nica variable. En un aspecto ms profundo, los
arrays, permiten almacenar muchos valores en posiciones de memoria continuas, lo cual permite
acceder a un valor u otro de manera rpida y sencilla. Estos valores pueden ser nmeros, letras o
cualquier tipo de variable que deseemos incluso tipos de datos propios.
En mltiples ocasiones es necesario almacenar gran cantidad de informacin en una variable y a
menudo sucede que no conocemos con exactitud la cantidad de datos que debemos almacenar, pero
sabemos que s sera ms de uno, como por ejemplo almacenar las identificaciones de las personas
ingresadas al sistema. Los arrays, arreglos o vectores son una estructura que nos permite solucionar
este tipo de problemas. Para explicar mejor de lo que hablo, pongamos un ejemplo:

Cmo declarar un Array o Vector en C++?

Para declarar un vector en C++, se deben seguir las mismas normas bsicas que se siguen para
declarar una variable cualquiera, con un pequeo cambio en la sintaxis. Para declarar un vector,
arreglo o como lo quieras llamar, necesitaremos saber el tipo de los datos que irn al interior de este,
es decir, sern nmero enteros, o numero decimales o cadenas de texto, etc. necesitamos tambin,
como siempre, un nombre para el vector y un tamao mximo. La sintaxis para declarar un vector en
C++ es la siguiente:
tipo_de_dato nombre_del_vector[tamanio];

Tenemos entonces, tal como mencion antes, que para declarar un vector en C++, debemos definirle
un tipo de los datos, sea entero, float, string, etc., debemos darle un nombre y al interior de los
corchetes "[]" debemos poner el tamao mximo que tendr el vector, es decir la cantidad mxima de
datos que podr contener (recuerda que en C++ esto es necesario hacerlo). Veamos un ejemplo en el
cual pondr la declaracin de varios vectores de diferentes tipos y tamaos en C++.
Declaracin de un Array o Vector en C++
int my_vector1[10];
float my_vector2[25];
string my_vector3[500];
bool my_vector4[1000];
char my_vector5[2];
Veamos rpidamente que representa cada lnea del cdigo anterior.
Lnea 1
Esta lnea contiene la declaracin de un vector llamado my_vector1, el cual contendr un mximo de
10 elementos de tipo entero.
Lnea 2
Esta lnea contiene la declaracin de un vector llamado my_vector2, el cual contendr un mximo de
25 elementos de tipo float.
Lnea 3
Esta lnea contiene la declaracin de un vector llamado my_vector3, el cual contendr un mximo de
500 elementos de tipo string.
Lnea 4
Esta lnea contiene la declaracin de un vector llamado my_vector4, el cual contendr un mximo de
1000 elementos de tipo booleano.
Lnea 5
Esta lnea contiene la declaracin de un vector llamado my_vector5, el cual contendr un mximo de
2 elementos de tipo char.
Ya que est claro cmo se declara un vector, vamos a ver cmo inicializarlo, es decir inicializar un
vector en C++ o en otras palabras darle valores a un vector.
Cmo inicializar un Array o Vector en C++?

En cuanto tenemos declarado un vector, es posible asignarle valores, evidentemente estos valores
deben coincidir con el tipo de dato que le asignamos a dicho vector, no tendra sentido ingresar como
valores de un vector cadenas de caracteres si el tipo de dato de dicho vector es numrico.
Voy a mostrar a continuacin formas distintas de inicializar un vector, todas son validas, ya es
cuestin de nuestras necesidades y conocimientos determinar cul es til y en qu momento.
Veamos entonces:
Forma 1 de declarar un Array o Vector en C++
string vector[5] = {"5", "hola", "2.7", "8,9", "adios"};

Aqu hemos declarado un vector de tipo string tamao 5 y lo hemos inicializado con diferentes
valores, es necesario notar que cada valor va entre comillas dobles "" puesto que son strings. El valor
inicial corresponde a la casilla o ndice 0 y tiene el valor de "5", el ndice 1 el valor es "hola" y el ndice
4 el valor es "adis", es importante notar que el primer ndice de n array o vector no es el UNO sino
que es el CERO.
Forma 2 de declarar un Array o Vector en C++
int vector2[] = {1,2,3,4,10,9,80,70,19};
Aqu hemos declarado un vector de tipo int y no especificamos su tamao, si el tamao no se
especifica entre los corchetes, el vector tendr como tamao el nmero de elementos incluidos en la
llave, para este caso es 9.
Particularidades de los Arrays, arreglos o Vectores en C++
Con C++, existen algunas particularidades, en cuanto a la declaracin de vectores, que me parece
importante destacara para que en momento de quiz caer en ellas comprender como podran cambiar
las cosas o bsicamente en que consiste el error, veamos:
Particularidad 1 al momento de declarar o inicializar un Vector o Array en C++
int vector2[3];
vector2[3] = {1,5,10};
Dadas las caractersticas de C++, es fcil pensar que s factible crear o declarar un vector de un
tamao cualquiera y posteriormente inicializarlos de forma habitual como se muestra en este cdigo,
sin embargo hacer esto es un error, si declaramos un vector y no lo inicializamos inmediatamente, no
es posible inicializarlo de la forma que hemos visto, es decir entre llaves cada valor, como en la lnea
2 del cdigo anterior. La nica forma de inicializar el vector, o mejor dicho, darle valores a cada una
de sus casillas, es hacerlo uno por uno, es decir darle un valor a la casilla cero a la uno y a la 2 (para
un vector de tamao 3). Por defecto, al declarar un vector sin ser inicializado, cada una de las casillas

de este vector toma como valor el valor por defecto del tipo de variable, para el caso de los enteros
(int) es -858993460. As entonces para asignar valores a cada casilla lo hacemos as:
int vector2[3];
vector2[0] = 1;
vector2[1] = 3;
vector2[2] = 10;
Es importante notar en este cdigo, que el nmero que va entre corchetes ya no indica tamao (pues
vector2 ya est declarado) sino que indica el ndice o el numero de la casilla con la cual estaremos
operando (recordemos que el primer ndice es cero y no uno), en el cdigo anterior, habamos
declarado un vector de tamao 3, por lo cual debamos asignar valores a los ndices 0, 1 y 2.
Particularidad 2 al momento de declarar o inicializar un Vector o Array en C++
float vector3[5] = {10.5};
En C++ a la hora de inicializar un array, arreglo o Vector, estamos acostumbrados a que si
inicializamos inmediatamente despus de declarar el vector, debemos poner la misma cantidad de
elementos al interior de las llaves de manera que corresponda con el tamao del vector, pues bien,
estos es lo ms recomendable, sin embargo si ponemos una cantidad de elementos menor a la del
tamao real del vector, estamos queriendo decir que estos elementos toman los valores puestos entre
las llaves y los dems serian cero, para el caso del cdigo anterior el primer elemento (el del ndice
cero) va a tener un valor de 10.5 y los otros 4 elementos van a valer cero.
Ya tenemos claro cmo declarar un array o vector en C++, algunas caractersticas un tanto
particulares de estos, sin embargo aun no sabemos cmo obtener los datos de un array, es decir una
vez el array o vector este lleno con los elementos que queremos, como podemos obtener esa
informacin y ms aun, como obtener un valor especfico dentro del array. Vemoslo:
Obtener el valor de una casilla especfica en un array en C++
Es muy comn el caso en el que tenemos un vector con una enorme cantidad de elementos, sin
embargo de todos estos, solo nos interesa uno en especial y corremos con la suerte de saber cul es
su ndice, sabiendo el ndice de un elemento en un array es bastante sencillo obtener el valor de este:
float vector4[5] = {10.5, 5.1, 8.9, 10, 95.2}; //Array con 5 elementos
float numero5 = vector4[4]; //Para acceder al elemento 5, se usa el ndice 4
float primerNumero = vector4[0]; //Para el primer elemento se usa el ndice 0
Como podemos ver, para acceder a un valor especfico conociendo el ndice del elemento, solo basta
con escribir dicho ndice entre los corchetes "[ ]", recuerda que el ndice comienza desde cero, as por
lo tanto en un vector de 5 elementos (como el del ejemplo), el ltimo elemento esta en el ndice 4 y el
primer elemento del array en el ndice 0.

Вам также может понравиться