Curso de C++ desde cero

Arrays y bucles con C++

Capítulo 18: Omitir tamaño de array e iteraciones

Seguimos viendo un poco más sobre los array antes de seguir con más temas.

Omitir el tamaño de un array

En muchos lenguajes de programación, los arrays son más flexibles que en C++. Por ejemplo, en Python o en JavaScript, escribimos el array sin especificar el tipo de dato ni la cantidad de elementos que lo conforman. Esto nos permite ir añadiendo posiciones nuevas a los array sin ninguna dificultad y además, admiten diferentes tipos de datos almacenados en el mismo array.

No obstante, en C++ podemos omitir escribir el tamaño del array (número de posiciones). La forma es la siguiente:

	string colores[] = { "rojo", "azul", "verde", "amarillo"};

La solución está en no añadir un número de posición en los corchetes.

El problema de esto, es que en realidad, estamos creando un array que aunque no lo especifiquemos, tiene un valor de 4 en cuanto a posiciones y para añadir alguna más, tendremos que asignarle las nuevas posiciones al array.

	string colores[] = { "rojo", "azul", "verde", "amarillo"};
				
colores[4] = "naranja";

Intento crear una quinta posición (recuerda que se cuenta desde el 0 en los array), pero no funciona, ya que realmente, en la declaración del array, solo hay 4 posiciones. Esto colores[4] = "naranja"; solo sirve para asignar en C++, no es como en otros lenguajes de programación que crean la posición y luego asignan.

¿La solución? Esta de aquí:

string colores[] = { "rojo", "azul", "verde", "amarillo", "naranja"};

Otra solución sería asignar un valor de posiciones más grande en la declaración del array.

string colores[6] = { "rojo", "azul", "verde", "amarillo"};
				
colores[4] = "naranja";
colores[5] = "rosa";

Ya sé que puede liar un poco al principio el número de posiciones máximo del array y el número de posición que empieza a contarse desde el cero. Dale tiempo si este es tu primer lenguaje de programación. Te acostumbrarás.

Crear arrays vacíos en C++

Una posibilidad es la de crear un array vacío. Le daremos un tamaño de posiciones y más adelante, podemos ir declarando cada valor en una posición.

string colores[4];
				
colores[0] = "rojo";
colores[1] = "azul";
colores[2] = "verde";
colores[3] = "amarillo";

Como iterar los valores de un array en C++

Iterar es el hecho de repetir un trozo de código en un programa. Eso es lo que hacemos con los bucles.

Los array se pueden escribir de otra forma. Voy a importar el archivo de encabezado array para facilitar lo que vamos a hacer a continuación. Ponlo con el resto de #include.

#include <array>

En este ejemplo, te voy a enseñar a iterar un array para utilizar cada una de sus posiciones de manera automática. Da igual cuantas posiciones tenga cada array. El bucle que escribiré a continuación, te servirá igual.

Aquí tienes un array con 195 elementos:

arraypaises = { "Afganistán","Albania", "Alemania", "Andorra",
"Angola", "Antigua y Barbuda", "Arabia Saudita", "Argelia",
"Argentina", "Armenia", "Australia", "Austria", "Azerbaiyán",
"Bahamas", "Bahréin", "Bangladés", "Barbados", "Bielorrusia",
"Bélgica", "Belice", "Benín", "Bután", "Bolivia", "Bosnia-Herzegovina",
"Botsuana", "Brasil", "Brunéi", "Bulgaria", "Burkina Faso", "Burundi",
"Cabo Verde", "Camboya", "Camerún", "Canadá", "Chad", "República Checa",
"Chequia", "Chile", "China", "Chipre", "Colombia", "Comoras", "Congo",
"República Democrática del Congo", "Corea del Norte", "Corea del Sur",
"Costa Rica", "Costa de Marfil", "Croacia", "Cuba", "Dinamarca", "Yibuti",
"Dominica", "Ecuador", "Egipto", "El Salvador", "Emiratos Árabes Unidos",
"Eritrea", "Eslovaquia", "Eslovenia", "España", "Estados Unidos", "Estonia",
"Etiopía", "Fiyi", "Filipinas", "Finlandia", "Francia", "Gabón", "Gambia",
"Georgia", "Ghana", "Granada", "Grecia", "Guatemala", "Guinea", "Guinea-Bissau",
"Guinea Ecuatorial", "Guyana", "Haití", "Honduras", "Hungría", "India",
"Indonesia", "Irán", "Iraq", "Irlanda", "Islandia", "Israel", "Italia", "Jamaica",
"Japón", "Jordania", "Kazajistán", "Kenia", "Kirguistán", "Kiribati", "Kuwait",
"Laos", "Lesoto", "Letonia", "Líbano", "Liberia", "Libia", "Liechtenstein",
"Lituania", "Luxemburgo", "Macedonia", "Madagascar", "Malasia", "Malaui",
"Maldivas", "Mali / Malí", "Malta", "Marruecos", "Islas Marshall", "Mauricio",
"Mauritania", "México", "Micronesia", "Moldavia", "Mónaco", "Mongolia", "Montenegro",
"Mozambique", "Birmania", "Namibia", "Nauru", "Nepal", "Nicaragua", "Níger",
"Nigeria", "Noruega", "Nueva Zelanda", "Omán", "Países Bajos", "Pakistán", "Palaos",
"Panamá", "Papúa Nueva Guinea", "Paraguay", "Perú", "Polonia", "Portugal", "Qatar",
"Reino Unido", "República Centroafricana", "República Dominicana", "Rumanía / Rumania",
"Rusia", "Ruanda", "San Cristóbal y Nieves", "Islas Salomón", "Samoa", "San Marino",
"Santa Lucía", "Ciudad del Vaticano", "Santo Tomé y Príncipe",
"San Vicente y las Granadinas", "Senegal", "Serbia", "Seychelles", "Sierra Leona",
"Singapur", "Siria", "Somalia", "Sri Lanka", "Sudáfrica", "Sudán", "Sudán del Sur",
"Suecia", "Suiza", "Surinam", "Suazilandia", "Tailandia", "Tanzania", "Tayikistán",
"Timor Oriental", "Togo", "Tonga", "Trinidad y Tobago", "Túnez", "Turkmenistán",
"Turquía", "Tuvalu", "Ucrania", "Uganda", "Uruguay", "Uzbekistán", "Vanuatu",
"Venezuela", "Vietnam", "Yemen", "Zambia", "Zimbabue" };

¿Y si tuvieses que utilizarlos para sacarlos en consola con un número? Por ejemplo así:

1- Afganistán.
2 - Albania.
3 - Alemania.
...
195 - Zimbabue.

De la forma que sabes hasta este punto del curso, lo tendrías que hacer así:

cout << "1 - " << paises[0] << "." << endl;
cout << "2 - " << paises[1] << "." << endl;
cout << "3 - " << paises[2] << "." << endl;
...
cout << "195 - " << paises[194] << ".";

Es muy largo, ¿Verdad? ¿Cuánto tardarías en escribir 195 veces lo mismo? ¿15 minutos con copia y pega?

Son casi 15 minutos más de lo que necesitas para escribir un bucle que haga el trabajo sucio por tí.

for (int i = 0; i < paises.size(); i++) {
	cout << i + 1 << " - " << paises[i] << "." << endl;
}

Con solo 3 líneas de código conseguimos mostrar todos los elementos en la consola.

1- Afganistán.
2 - Albania.
3 - Alemania.
...
195 - Zimbabue.

Su funcionamiento es sencillo. Primero le damos un valor de 0 a la variable i. Este se corresponde con la posición 0 del array.
Le decimos que el valor de i sea menor que paises.size() que equivale a 195. El valor de i se va incrementando i++ y cada vuelta, muestra una posición del array gracias a paises[i] que está en el cout. Este equivale cada vuelta al valor de i:

  • paises[0]
  • paises[1]
  • ...
  • paises[194]

Comentarios

Si te quedan dudas sobre el temario, sobre C++, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.

Programación Fácil YouTube

Suscríbete

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.