Lección 5
Arrays
Respuesta corta: un array es una fila de cajas del mismo tipo, contiguas en memoria, numeradas desde 0. int a[5] te da cinco int llamados a[0] a a[4].
Declarar, rellenar, imprimir
#include <iostream>
using namespace std;
int main() {
int a[5] = {10, 20, 30, 40, 50};
for (int i = 0; i < 5; i++) {
cout << "a[" << i << "] = " << a[i] << endl;
}
return 0;
}
Fíjate en el límite: i < 5, porque los índices válidos son 0..4. Con i <= 5 leerías a[5], que no existe.
Leer dentro de un array
Los arrays brillan cuando la longitud se conoce primero — lee n y luego n valores:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int a[100];
for (int i = 0; i < n; i++) cin >> a[i];
int suma = 0;
for (int i = 0; i < n; i++) suma += a[i];
cout << "suma = " << suma << endl;
return 0;
}
El array se declara más grande de lo necesario (100) porque en C++ el tamaño se fija en compilación — no se puede redimensionar. Esta es exactamente la forma de Máximo de un array y Contar pares e impares.
El patrón del máximo corriente
El patrón de arrays más útil que escribirás cien veces: llevar un valor mejor mientras recorres.
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int a[100];
for (int i = 0; i < n; i++) cin >> a[i];
int mejor = a[0];
for (int i = 1; i < n; i++) {
if (a[i] > mejor) mejor = a[i];
}
cout << "max = " << mejor << endl;
return 0;
}
Sembrar mejor con a[0] (no con 0) es lo que hace funcionar la entrada toda negativa. Sembrar con 0 es el bug más común en problemas de máximo — pruébalo y verás esta entrada fallar.
Arrays bidimensionales
Filas y columnas necesitan dos índices: a[fila][col].
#include <iostream>
using namespace std;
int main() {
int g[2][3] = {{1, 2, 3}, {4, 5, 6}};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
cout << g[i][j] << " ";
}
cout << endl;
}
return 0;
}
La convención importa: el primer índice es la fila. Al revés, la cuadrícula se imprime transpuesta — mira Transponer una matriz.
Los tres bugs de arrays
- Error de uno.
<=en vez de<lee uno más allá del final. C++ no te detiene. - Tamaño demasiado pequeño. Declarar
int a[10]y leer 20 valores escribe en memoria que no es tuya. - Suma sin inicializar.
int suma; for (...) suma += a[i];suma a basura. Escribeint suma = 0;.
Practica esta lección
Estos problemas ejercitan exactamente lo que acabas de leer: